Cleaned up ZP usage.
This commit is contained in:
parent
9c723cce1d
commit
da96e23cc7
6 changed files with 58 additions and 48 deletions
10
carddeck.c65
10
carddeck.c65
|
|
@ -95,7 +95,7 @@ FEND
|
||||||
// Tab0=1, Tab1=2, Tab2=3, Tab3=4, Tab4=5, Tab5=6, Tab6=7 cards
|
// Tab0=1, Tab1=2, Tab2=3, Tab3=4, Tab4=5, Tab5=6, Tab6=7 cards
|
||||||
// Top card of each tableau is face up
|
// Top card of each tableau is face up
|
||||||
FUNC deal_tableaus
|
FUNC deal_tableaus
|
||||||
WORD ptr @ $fc
|
WORD ptr
|
||||||
|
|
||||||
POINTER ptr -> pile_tab0
|
POINTER ptr -> pile_tab0
|
||||||
deal_to_tableau(ptr, 1)
|
deal_to_tableau(ptr, 1)
|
||||||
|
|
@ -121,7 +121,7 @@ FEND
|
||||||
|
|
||||||
// Clear the seen array
|
// Clear the seen array
|
||||||
FUNC validate_clear_seen
|
FUNC validate_clear_seen
|
||||||
WORD ptr @ $fa
|
WORD ptr @ $86
|
||||||
POINTER ptr -> validate_seen
|
POINTER ptr -> validate_seen
|
||||||
BYTE i
|
BYTE i
|
||||||
FOR i = 0 TO 51
|
FOR i = 0 TO 51
|
||||||
|
|
@ -131,8 +131,8 @@ FEND
|
||||||
|
|
||||||
// Check cards in a pile, mark as seen
|
// Check cards in a pile, mark as seen
|
||||||
// Returns 0 if OK, 1 if duplicate found
|
// Returns 0 if OK, 1 if duplicate found
|
||||||
FUNC validate_pile({WORD pile_ptr @ $fa} out:{BYTE result})
|
FUNC validate_pile({WORD pile_ptr @ $a2} out:{BYTE result})
|
||||||
WORD seen_ptr @ $fc
|
WORD seen_ptr @ $b2
|
||||||
POINTER seen_ptr -> validate_seen
|
POINTER seen_ptr -> validate_seen
|
||||||
|
|
||||||
BYTE count
|
BYTE count
|
||||||
|
|
@ -166,7 +166,7 @@ FEND
|
||||||
// Validate entire deck across all piles
|
// Validate entire deck across all piles
|
||||||
// Returns: 0=OK, 1=duplicate, 2=missing
|
// Returns: 0=OK, 1=duplicate, 2=missing
|
||||||
FUNC validate_deck(out:{BYTE result})
|
FUNC validate_deck(out:{BYTE result})
|
||||||
WORD ptr @ $fa
|
WORD ptr @ $98
|
||||||
WORD seen_ptr @ $fc
|
WORD seen_ptr @ $fc
|
||||||
BYTE pile_result
|
BYTE pile_result
|
||||||
BYTE i
|
BYTE i
|
||||||
|
|
|
||||||
|
|
@ -36,11 +36,14 @@ FUNC main
|
||||||
sei
|
sei
|
||||||
ENDASM
|
ENDASM
|
||||||
|
|
||||||
|
// Save zero page for potential kernal operations later
|
||||||
|
save_zeropage()
|
||||||
|
|
||||||
// Initialize game state
|
// Initialize game state
|
||||||
#IFNDEF TEST_GAMES
|
#IFNDEF TEST_GAMES
|
||||||
// Normal game: random shuffle and deal
|
// Normal game: random shuffle and deal
|
||||||
// Seed RNG with multiple entropy sources for better randomness
|
// Seed RNG with multiple entropy sources for better randomness
|
||||||
WORD timer_seed @ $fa
|
WORD timer_seed
|
||||||
BYTE raster @ $d012
|
BYTE raster @ $d012
|
||||||
BYTE extra_entropy
|
BYTE extra_entropy
|
||||||
BYTE warmup
|
BYTE warmup
|
||||||
|
|
|
||||||
|
|
@ -31,8 +31,8 @@ FUNC card_color({BYTE card_id} out:{BYTE color})
|
||||||
FEND
|
FEND
|
||||||
|
|
||||||
// Get top card from pile (returns card with facedown bit, or PILE_END if empty)
|
// Get top card from pile (returns card with facedown bit, or PILE_END if empty)
|
||||||
// Uses $fa - for source pile operations
|
// Uses $ac - for source pile operations
|
||||||
FUNC pile_top_card({WORD pile_ptr @ $fa} out:{BYTE card})
|
FUNC pile_top_card({WORD pile_ptr @ $ac} out:{BYTE card})
|
||||||
BYTE count
|
BYTE count
|
||||||
count = PEEK pile_ptr[0]
|
count = PEEK pile_ptr[0]
|
||||||
IF count == 0
|
IF count == 0
|
||||||
|
|
@ -43,8 +43,8 @@ FUNC pile_top_card({WORD pile_ptr @ $fa} out:{BYTE card})
|
||||||
FEND
|
FEND
|
||||||
|
|
||||||
// Remove top card from pile (returns the card, updates count)
|
// Remove top card from pile (returns the card, updates count)
|
||||||
// Uses $fa - for source pile operations
|
// Uses $9a - for source pile operations
|
||||||
FUNC pile_pop({WORD pile_ptr @ $fa} out:{BYTE card})
|
FUNC pile_pop({WORD pile_ptr @ $9a} out:{BYTE card})
|
||||||
BYTE count
|
BYTE count
|
||||||
count = PEEK pile_ptr[0]
|
count = PEEK pile_ptr[0]
|
||||||
card = PEEK pile_ptr[count]
|
card = PEEK pile_ptr[count]
|
||||||
|
|
@ -63,8 +63,8 @@ FUNC pile_push({WORD pile_ptr @ $fc} {BYTE card})
|
||||||
FEND
|
FEND
|
||||||
|
|
||||||
// Flip top card face-up if it's face-down
|
// Flip top card face-up if it's face-down
|
||||||
// Uses $fa - for source pile operations
|
// Uses $9e - for source pile operations
|
||||||
FUNC pile_flip_top({WORD pile_ptr @ $fa})
|
FUNC pile_flip_top({WORD pile_ptr @ $9e})
|
||||||
BYTE count
|
BYTE count
|
||||||
BYTE card
|
BYTE card
|
||||||
BYTE is_facedown
|
BYTE is_facedown
|
||||||
|
|
@ -165,10 +165,10 @@ FEND
|
||||||
|
|
||||||
// Stock to Waste: Draw cards from stock to waste
|
// Stock to Waste: Draw cards from stock to waste
|
||||||
// draw_count = 1 or 3 depending on game variant
|
// draw_count = 1 or 3 depending on game variant
|
||||||
// Stock is source @ $fa, Waste is destination @ $fc
|
// Stock is source @ $94, Waste is destination
|
||||||
FUNC move_stock_to_waste({BYTE draw_count} out:{BYTE success})
|
FUNC move_stock_to_waste({BYTE draw_count} out:{BYTE success})
|
||||||
WORD stock_ptr @ $fa
|
WORD stock_ptr @ $94
|
||||||
WORD waste_ptr @ $fc
|
WORD waste_ptr
|
||||||
POINTER stock_ptr -> pile_stock
|
POINTER stock_ptr -> pile_stock
|
||||||
POINTER waste_ptr -> pile_waste
|
POINTER waste_ptr -> pile_waste
|
||||||
BYTE stock_count
|
BYTE stock_count
|
||||||
|
|
@ -196,10 +196,10 @@ FUNC move_stock_to_waste({BYTE draw_count} out:{BYTE success})
|
||||||
FEND
|
FEND
|
||||||
|
|
||||||
// Reset Stock: Flip waste back to stock (all face-down)
|
// Reset Stock: Flip waste back to stock (all face-down)
|
||||||
// Waste is source @ $fa, Stock is destination @ $fc
|
// Waste is source @ $9c, Stock is destination
|
||||||
FUNC move_reset_stock(out:{BYTE success})
|
FUNC move_reset_stock(out:{BYTE success})
|
||||||
WORD waste_ptr @ $fa
|
WORD waste_ptr @ $9c
|
||||||
WORD stock_ptr @ $fc
|
WORD stock_ptr
|
||||||
POINTER waste_ptr -> pile_waste
|
POINTER waste_ptr -> pile_waste
|
||||||
POINTER stock_ptr -> pile_stock
|
POINTER stock_ptr -> pile_stock
|
||||||
BYTE waste_count
|
BYTE waste_count
|
||||||
|
|
@ -223,8 +223,8 @@ FUNC move_reset_stock(out:{BYTE success})
|
||||||
FEND
|
FEND
|
||||||
|
|
||||||
// Waste to Tableau
|
// Waste to Tableau
|
||||||
FUNC move_waste_to_tab({WORD tab_ptr @ $fc} out:{BYTE success})
|
FUNC move_waste_to_tab({WORD tab_ptr} out:{BYTE success})
|
||||||
WORD waste_ptr @ $fa
|
WORD waste_ptr @ $8c
|
||||||
POINTER waste_ptr -> pile_waste
|
POINTER waste_ptr -> pile_waste
|
||||||
BYTE card
|
BYTE card
|
||||||
BYTE valid
|
BYTE valid
|
||||||
|
|
@ -248,8 +248,8 @@ FUNC move_waste_to_tab({WORD tab_ptr @ $fc} out:{BYTE success})
|
||||||
FEND
|
FEND
|
||||||
|
|
||||||
// Waste to Foundation
|
// Waste to Foundation
|
||||||
FUNC move_waste_to_found({WORD found_ptr @ $fc} out:{BYTE success})
|
FUNC move_waste_to_found({WORD found_ptr} out:{BYTE success})
|
||||||
WORD waste_ptr @ $fa
|
WORD waste_ptr @ $aa
|
||||||
POINTER waste_ptr -> pile_waste
|
POINTER waste_ptr -> pile_waste
|
||||||
BYTE card
|
BYTE card
|
||||||
BYTE valid
|
BYTE valid
|
||||||
|
|
@ -273,7 +273,7 @@ FUNC move_waste_to_found({WORD found_ptr @ $fc} out:{BYTE success})
|
||||||
FEND
|
FEND
|
||||||
|
|
||||||
// Tableau to Foundation (top card only)
|
// Tableau to Foundation (top card only)
|
||||||
FUNC move_tab_to_found({WORD tab_ptr @ $fa} {WORD found_ptr @ $fc} out:{BYTE success})
|
FUNC move_tab_to_found({WORD tab_ptr @ $8e} {WORD found_ptr} out:{BYTE success})
|
||||||
BYTE card
|
BYTE card
|
||||||
BYTE valid
|
BYTE valid
|
||||||
BYTE is_facedown
|
BYTE is_facedown
|
||||||
|
|
@ -305,7 +305,7 @@ FUNC move_tab_to_found({WORD tab_ptr @ $fa} {WORD found_ptr @ $fc} out:{BYTE suc
|
||||||
FEND
|
FEND
|
||||||
|
|
||||||
// Tableau to Tableau: Move card_count cards from src to dst
|
// Tableau to Tableau: Move card_count cards from src to dst
|
||||||
FUNC move_tab_to_tab({WORD src_ptr @ $fa} {WORD dst_ptr @ $fc} {BYTE card_count} out:{BYTE success})
|
FUNC move_tab_to_tab({WORD src_ptr @ $b0} {WORD dst_ptr} {BYTE card_count} out:{BYTE success})
|
||||||
BYTE src_count
|
BYTE src_count
|
||||||
BYTE start_idx
|
BYTE start_idx
|
||||||
BYTE bottom_card
|
BYTE bottom_card
|
||||||
|
|
@ -358,7 +358,7 @@ FUNC move_tab_to_tab({WORD src_ptr @ $fa} {WORD dst_ptr @ $fc} {BYTE card_count}
|
||||||
FEND
|
FEND
|
||||||
|
|
||||||
// Foundation to Tableau (optional rule - some variants allow this)
|
// Foundation to Tableau (optional rule - some variants allow this)
|
||||||
FUNC move_found_to_tab({WORD found_ptr @ $fa} {WORD tab_ptr @ $fc} out:{BYTE success})
|
FUNC move_found_to_tab({WORD found_ptr @ $84} {WORD tab_ptr} out:{BYTE success})
|
||||||
BYTE card
|
BYTE card
|
||||||
BYTE valid
|
BYTE valid
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ FUNC render_card({WORD screen_address} {WORD offset} {BYTE card_id})
|
||||||
card_id_to_suit_rank(card_id, card_suit, card_rank)
|
card_id_to_suit_rank(card_id, card_suit, card_rank)
|
||||||
|
|
||||||
// Get rank charcode
|
// Get rank charcode
|
||||||
WORD card_charcode_map_ptr @ $fa
|
WORD card_charcode_map_ptr @ $a0
|
||||||
POINTER card_charcode_map_ptr -> card_charcode_map
|
POINTER card_charcode_map_ptr -> card_charcode_map
|
||||||
|
|
||||||
BYTE card_rank_charcode
|
BYTE card_rank_charcode
|
||||||
|
|
@ -79,14 +79,14 @@ FUNC render_card({WORD screen_address} {WORD offset} {BYTE card_id})
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
// Get suit charcode
|
// Get suit charcode
|
||||||
WORD card_suit_charcode_map_ptr @ $fa
|
WORD card_suit_charcode_map_ptr @ $a0
|
||||||
POINTER card_suit_charcode_map_ptr -> card_suit_charcode_map
|
POINTER card_suit_charcode_map_ptr -> card_suit_charcode_map
|
||||||
|
|
||||||
BYTE suit_charcode
|
BYTE suit_charcode
|
||||||
suit_charcode = PEEK card_suit_charcode_map_ptr[card_suit]
|
suit_charcode = PEEK card_suit_charcode_map_ptr[card_suit]
|
||||||
|
|
||||||
|
|
||||||
WORD p2 @ $fa
|
WORD p2 @ $a0
|
||||||
SWITCH card_suit
|
SWITCH card_suit
|
||||||
CASE CARD_SUIT_HEARTS
|
CASE CARD_SUIT_HEARTS
|
||||||
POINTER p2 -> suit_graphic_hearts
|
POINTER p2 -> suit_graphic_hearts
|
||||||
|
|
@ -291,7 +291,7 @@ FUNC render_card_body_partial({WORD screen_address} {WORD offset} {BYTE card_id}
|
||||||
card_id_to_suit_rank(card_id, card_suit, card_rank)
|
card_id_to_suit_rank(card_id, card_suit, card_rank)
|
||||||
|
|
||||||
// Get rank charcode
|
// Get rank charcode
|
||||||
WORD card_charcode_map_ptr @ $fa
|
WORD card_charcode_map_ptr @ $96
|
||||||
POINTER card_charcode_map_ptr -> card_charcode_map
|
POINTER card_charcode_map_ptr -> card_charcode_map
|
||||||
|
|
||||||
BYTE card_rank_charcode
|
BYTE card_rank_charcode
|
||||||
|
|
@ -303,7 +303,7 @@ FUNC render_card_body_partial({WORD screen_address} {WORD offset} {BYTE card_id}
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
// Get suit charcode
|
// Get suit charcode
|
||||||
WORD card_suit_charcode_map_ptr @ $fa
|
WORD card_suit_charcode_map_ptr @ $96
|
||||||
POINTER card_suit_charcode_map_ptr -> card_suit_charcode_map
|
POINTER card_suit_charcode_map_ptr -> card_suit_charcode_map
|
||||||
|
|
||||||
BYTE suit_charcode
|
BYTE suit_charcode
|
||||||
|
|
@ -329,7 +329,7 @@ FUNC render_card_body_full({WORD screen_address} {WORD offset} {BYTE card_id})
|
||||||
card_id_to_suit_rank(card_id, card_suit, card_rank)
|
card_id_to_suit_rank(card_id, card_suit, card_rank)
|
||||||
|
|
||||||
// Get rank charcode
|
// Get rank charcode
|
||||||
WORD card_charcode_map_ptr @ $fa
|
WORD card_charcode_map_ptr @ $90
|
||||||
POINTER card_charcode_map_ptr -> card_charcode_map
|
POINTER card_charcode_map_ptr -> card_charcode_map
|
||||||
|
|
||||||
BYTE card_rank_charcode
|
BYTE card_rank_charcode
|
||||||
|
|
@ -341,14 +341,14 @@ FUNC render_card_body_full({WORD screen_address} {WORD offset} {BYTE card_id})
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
// Get suit charcode
|
// Get suit charcode
|
||||||
WORD card_suit_charcode_map_ptr @ $fa
|
WORD card_suit_charcode_map_ptr @ $90
|
||||||
POINTER card_suit_charcode_map_ptr -> card_suit_charcode_map
|
POINTER card_suit_charcode_map_ptr -> card_suit_charcode_map
|
||||||
|
|
||||||
BYTE suit_charcode
|
BYTE suit_charcode
|
||||||
suit_charcode = PEEK card_suit_charcode_map_ptr[card_suit]
|
suit_charcode = PEEK card_suit_charcode_map_ptr[card_suit]
|
||||||
|
|
||||||
// Get suit graphic pointer
|
// Get suit graphic pointer
|
||||||
WORD p2 @ $fa
|
WORD p2 @ $90
|
||||||
SWITCH card_suit
|
SWITCH card_suit
|
||||||
CASE CARD_SUIT_HEARTS
|
CASE CARD_SUIT_HEARTS
|
||||||
POINTER p2 -> suit_graphic_hearts
|
POINTER p2 -> suit_graphic_hearts
|
||||||
|
|
@ -810,7 +810,7 @@ FUNC render_card_left_edge({WORD screen_address} {WORD offset} {BYTE card_id})
|
||||||
card_id_to_suit_rank(card_id, card_suit, card_rank)
|
card_id_to_suit_rank(card_id, card_suit, card_rank)
|
||||||
|
|
||||||
// Get rank charcode
|
// Get rank charcode
|
||||||
WORD card_charcode_map_ptr @ $fa
|
WORD card_charcode_map_ptr @ $a6
|
||||||
POINTER card_charcode_map_ptr -> card_charcode_map
|
POINTER card_charcode_map_ptr -> card_charcode_map
|
||||||
|
|
||||||
BYTE card_rank_charcode
|
BYTE card_rank_charcode
|
||||||
|
|
@ -822,14 +822,14 @@ FUNC render_card_left_edge({WORD screen_address} {WORD offset} {BYTE card_id})
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
// Get suit charcode
|
// Get suit charcode
|
||||||
WORD card_suit_charcode_map_ptr @ $fa
|
WORD card_suit_charcode_map_ptr @ $a6
|
||||||
POINTER card_suit_charcode_map_ptr -> card_suit_charcode_map
|
POINTER card_suit_charcode_map_ptr -> card_suit_charcode_map
|
||||||
|
|
||||||
BYTE suit_charcode
|
BYTE suit_charcode
|
||||||
suit_charcode = PEEK card_suit_charcode_map_ptr[card_suit]
|
suit_charcode = PEEK card_suit_charcode_map_ptr[card_suit]
|
||||||
|
|
||||||
// Get suit graphic pointer
|
// Get suit graphic pointer
|
||||||
WORD p2 @ $fa
|
WORD p2 @ $a6
|
||||||
SWITCH card_suit
|
SWITCH card_suit
|
||||||
CASE CARD_SUIT_HEARTS
|
CASE CARD_SUIT_HEARTS
|
||||||
POINTER p2 -> suit_graphic_hearts
|
POINTER p2 -> suit_graphic_hearts
|
||||||
|
|
|
||||||
17
gameloop.c65
17
gameloop.c65
|
|
@ -236,7 +236,7 @@ FEND
|
||||||
// Convert pile ID to pile data pointer
|
// Convert pile ID to pile data pointer
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
FUNC pile_id_to_pointer({BYTE pile_id} out:{WORD pile_ptr})
|
FUNC pile_id_to_pointer({BYTE pile_id} out:{WORD pile_ptr})
|
||||||
WORD ptr @ $fa
|
WORD ptr
|
||||||
|
|
||||||
SWITCH pile_id
|
SWITCH pile_id
|
||||||
CASE PILE_ID_STOCK
|
CASE PILE_ID_STOCK
|
||||||
|
|
@ -386,7 +386,7 @@ FEND
|
||||||
// Returns card_id (0-51) and valid flag (1=valid, 0=no selection)
|
// Returns card_id (0-51) and valid flag (1=valid, 0=no selection)
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
FUNC get_selected_card_info(out:{BYTE card_id} out:{BYTE valid})
|
FUNC get_selected_card_info(out:{BYTE card_id} out:{BYTE valid})
|
||||||
WORD pile_ptr @ $fa
|
WORD pile_ptr @ $80
|
||||||
BYTE pile_count
|
BYTE pile_count
|
||||||
BYTE card_index
|
BYTE card_index
|
||||||
BYTE card
|
BYTE card
|
||||||
|
|
@ -534,7 +534,7 @@ FEND
|
||||||
// Clears the area first to remove artifacts from previous render
|
// Clears the area first to remove artifacts from previous render
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
FUNC render_pile_by_id({BYTE pile_id})
|
FUNC render_pile_by_id({BYTE pile_id})
|
||||||
WORD pile_ptr @ $fa
|
WORD pile_ptr @ $92
|
||||||
WORD screen_offset
|
WORD screen_offset
|
||||||
|
|
||||||
pile_id_to_pointer(pile_id, pile_ptr)
|
pile_id_to_pointer(pile_id, pile_ptr)
|
||||||
|
|
@ -599,7 +599,7 @@ FEND
|
||||||
// Returns 1 if won, 0 otherwise
|
// Returns 1 if won, 0 otherwise
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
FUNC check_win_condition(out:{BYTE is_won})
|
FUNC check_win_condition(out:{BYTE is_won})
|
||||||
WORD ptr @ $fa
|
WORD ptr @ $a4
|
||||||
BYTE count
|
BYTE count
|
||||||
|
|
||||||
is_won = 1 // Assume won, set to 0 if any foundation incomplete
|
is_won = 1 // Assume won, set to 0 if any foundation incomplete
|
||||||
|
|
@ -650,7 +650,8 @@ FUNC handle_click_on_pile({BYTE clicked_pile} {BYTE click_row})
|
||||||
BYTE success
|
BYTE success
|
||||||
WORD src_ptr
|
WORD src_ptr
|
||||||
WORD dst_ptr
|
WORD dst_ptr
|
||||||
WORD tab_ptr @ $f8
|
//WORD tab_ptr @ $f8
|
||||||
|
WORD tab_ptr
|
||||||
BYTE tab_col
|
BYTE tab_col
|
||||||
BYTE tab_index
|
BYTE tab_index
|
||||||
BYTE j
|
BYTE j
|
||||||
|
|
@ -684,8 +685,6 @@ FUNC handle_click_on_pile({BYTE clicked_pile} {BYTE click_row})
|
||||||
|
|
||||||
IF clicked_pile == PILE_ID_STOCK
|
IF clicked_pile == PILE_ID_STOCK
|
||||||
// Stock: draw cards
|
// Stock: draw cards
|
||||||
WORD stock_ptr @ $fa
|
|
||||||
POINTER stock_ptr -> pile_stock
|
|
||||||
move_stock_to_waste(game_draw_mode, success)
|
move_stock_to_waste(game_draw_mode, success)
|
||||||
IF success
|
IF success
|
||||||
render_pile_by_id(PILE_ID_STOCK)
|
render_pile_by_id(PILE_ID_STOCK)
|
||||||
|
|
@ -820,9 +819,9 @@ FUNC game_loop
|
||||||
BYTE button_state
|
BYTE button_state
|
||||||
BYTE clicked
|
BYTE clicked
|
||||||
BYTE is_won
|
BYTE is_won
|
||||||
WORD src_ptr @ $fa
|
WORD src_ptr @ $8a
|
||||||
WORD src_end_ptr
|
WORD src_end_ptr
|
||||||
WORD dst_ptr @ $fc
|
WORD dst_ptr
|
||||||
|
|
||||||
// Copy sprite data to $2200 (sprite block 136)
|
// Copy sprite data to $2200 (sprite block 136)
|
||||||
// $2000-$21FF reserved for charset
|
// $2000-$21FF reserved for charset
|
||||||
|
|
|
||||||
14
utils.c65
14
utils.c65
|
|
@ -4,14 +4,14 @@
|
||||||
|
|
||||||
GOTO __skip_lib_utils
|
GOTO __skip_lib_utils
|
||||||
|
|
||||||
FUNC fill_mem({WORD start_addr @ $fa} {WORD end_addr} {BYTE value})
|
FUNC fill_mem({WORD start_addr @ $fb} {WORD end_addr} {BYTE value})
|
||||||
|
|
||||||
FOR start_addr = start_addr TO end_addr
|
FOR start_addr = start_addr TO end_addr
|
||||||
POKE start_addr , value
|
POKE start_addr , value
|
||||||
NEXT
|
NEXT
|
||||||
FEND
|
FEND
|
||||||
|
|
||||||
FUNC mem_copy({WORD start_addr @ $fa} {WORD end_addr} {WORD target_addr @ $fc})
|
FUNC mem_copy({WORD start_addr @ $fb} {WORD end_addr} {WORD target_addr @ $fd})
|
||||||
BYTE value
|
BYTE value
|
||||||
|
|
||||||
FOR start_addr = start_addr TO end_addr
|
FOR start_addr = start_addr TO end_addr
|
||||||
|
|
@ -22,7 +22,7 @@ FUNC mem_copy({WORD start_addr @ $fa} {WORD end_addr} {WORD target_addr @ $fc})
|
||||||
FEND
|
FEND
|
||||||
|
|
||||||
|
|
||||||
FUNC mem_copy_range({WORD start_addr @ $fa} {WORD target_addr @ $fc} {WORD range})
|
FUNC mem_copy_range({WORD start_addr @ $fb} {WORD target_addr @ $fd} {WORD range})
|
||||||
BYTE value
|
BYTE value
|
||||||
|
|
||||||
WHILE range
|
WHILE range
|
||||||
|
|
@ -137,6 +137,14 @@ FUNC wait_key
|
||||||
WEND
|
WEND
|
||||||
FEND
|
FEND
|
||||||
|
|
||||||
|
FUNC save_zeropage
|
||||||
|
mem_copy_range($0000, $cf00, 256)
|
||||||
|
FEND
|
||||||
|
|
||||||
|
FUNC restore_zeropage
|
||||||
|
mem_copy_range($cf00, $0000, 256)
|
||||||
|
FEND
|
||||||
|
|
||||||
LABEL __skip_lib_utils
|
LABEL __skip_lib_utils
|
||||||
|
|
||||||
#IFEND
|
#IFEND
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue