From 0597988a59d7fdb5d0a85591f34ffdcaec27e3ff Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 27 Sep 2019 23:29:33 +0200 Subject: [PATCH] more label conflicts fixed --- c64/aliases/,aliases_ram_lowmem.s | 6 +- c64/basic/,aliases.s | 35 -- c64/basic/cmd_load.s | 14 +- c64/basic/select_device.s | 2 +- c64/basic/wedge_dos.s | 4 +- c64/kernal/,aliases.s | 40 +- c64/kernal/blink_cursor.s | 67 ++-- c64/kernal/chrin_real.s | 34 +- c64/kernal/chrout_real.s | 375 +++++++++--------- c64/kernal/cint_real.s | 2 +- c64/kernal/e544.clear_screen.s | 18 +- c64/kernal/f13e.getin.s | 2 +- c64/kernal/f34a.open.s | 12 +- c64/kernal/f4a5.load.s | 12 +- c64/kernal/home_cursor.s | 4 +- c64/kernal/lvs_helpers.s | 8 +- c64/kernal/plot.s | 8 +- c64/kernal/readst.s | 2 +- c64/kernal/scnkey.s | 22 +- .../set_pointer_to_current_screen_line.s | 18 +- c64/kernal/setfls.s | 10 +- 21 files changed, 311 insertions(+), 384 deletions(-) diff --git a/c64/aliases/,aliases_ram_lowmem.s b/c64/aliases/,aliases_ram_lowmem.s index 7979fff0..fa96322b 100644 --- a/c64/aliases/,aliases_ram_lowmem.s +++ b/c64/aliases/,aliases_ram_lowmem.s @@ -99,7 +99,7 @@ .label RIDDATA = $AA // -- NOT IMPLEMENTED -- .label RIPRTY = $AB // -- NOT IMPLEMENTED -- .label SAL = $AC // $AC-$AD -- NOT IMPLEMENTED -- (implemented screen part) - .label EAL = $AE // $AE-$AF -- NOT IMPLEMENTED -- [!] used also byy screen editor + .label EAL = $AE // $AE-$AF -- NOT IMPLEMENTED -- [!] used also by screen editor, for temporary color storage when scrolling .label CMP0 = $B0 // $B0-$B1 temporary tape storage, [!] here used for BRK instruction address .label TAPE1 = $B2 // $B2-$B3 tape buffer pointer .label BITTS = $B4 // -- NOT IMPLEMENTED -- @@ -124,7 +124,7 @@ .label SFDX = $CB // -- NOT IMPLEMENTED -- .label BLNSW = $CC // cursor blink disable flag .label BLNCT = $CD // cursor blink countdown - .label GDBLN = $CE // cursorb saved character + .label GDBLN = $CE // cursor saved character .label BLNON = $CF // cursor visibilityy flag .label CRSW = $D0 // whether to input from screen or keyboard .label PNT = $D1 // $D1-$D2 pointer to the current screen line @@ -134,7 +134,7 @@ .label TBLX = $D6 // current screen Y position .label SCHAR = $D7 // ASCII value of the last printed character .label INSRT = $D8 // insert mode flag/counter - .label LDTB1 = $D9 // $D9-$F2 screen line link table, [!] our usage is different XXX give more details + .label LDTBL = $D9 // $D9-$F2 screen line link table, [!] our usage is different XXX give more details .label USER = $F3 // $F3-$F4 pointer to current color RAM location .label KEYTAB = $F5 // $F5-$F6 -- NOT IMPLEMENTED -- .label RIBUF = $F7 // $F7-$F8 -- NOT IMPLEMENTED -- diff --git a/c64/basic/,aliases.s b/c64/basic/,aliases.s index ef91afa0..479d6bf1 100644 --- a/c64/basic/,aliases.s +++ b/c64/basic/,aliases.s @@ -53,41 +53,6 @@ .label memmove_src = $69 .label memmove_dst = $6b .label memmove_size = $6d - - .label current_file_num = $98 - .label cassette_buffer_bytes_used = $A6 - .label load_or_scroll_temp_pointer = $AC - // We also use the following for temp colour pointer when scrolling - .label load_save_verify_end_address = $AE - - .label current_logical_filenum = $B8 - .label current_secondary_address = $B9 - .label current_device_number = $BA - .label current_filename_ptr = $BB - .label load_save_start_ptr = $C1 - .label load_save_end_ptr = $C3 - .label last_key_matrix_position = $C5 - .label keys_in_key_buffer = $C6 - .label reverse_video_flag = $C7 - .label end_of_input_line = $C8 - .label start_of_keyboard_input = $C9 - .label current_key_index_entry = $CB - .label cursor_blink_disable = $CC - .label cursor_blink_countdown = $CD - .label cursor_saved_character = $CE - .label cursor_is_visible = $CF - .label keyboard_input_ready = $D0 - .label current_screen_line_ptr = $D1 - .label current_screen_x = $D3 - .label logical_line_length = $D5 - .label current_screen_y = $D6 - .label last_printed_character_ascii = $D7 - .label insert_mode = $D8 - // Bits 0 -3 = bits 8-11 of screen line address - // Bit 7 = line spans multiple physical lines - .label screen_line_link_table = $D9 - .label current_screen_line_colour_ptr = $F3 - .label keyboard_decoding_table_ptr = $F5 #if CONFIG_MEMORY_MODEL_60K diff --git a/c64/basic/cmd_load.s b/c64/basic/cmd_load.s index fdcd3e5a..eb5e1089 100644 --- a/c64/basic/cmd_load.s +++ b/c64/basic/cmd_load.s @@ -37,10 +37,10 @@ cmd_load: !: // Filename starts here so set pointer lda basic_current_statement_ptr+0 - sta current_filename_ptr+0 + sta FNADDR+0 lda basic_current_statement_ptr+1 - sta current_filename_ptr+1 - + sta FNADDR+1 + // Now search for end of line or closing quote // so that we know the length of the filename getting_filename: @@ -60,7 +60,7 @@ got_filename: // Now fetch the file number, start from the default one jsr select_device - stx current_device_number + stx FA jsr injest_comma bcs got_devicenumber @@ -70,20 +70,20 @@ got_filename: jmp do_ILLEGAL_QUANTITY_error !: lda basic_line_number+0 - sta current_device_number + sta FA got_devicenumber: // Now fetch the secondary address lda #$00 - sta current_secondary_address + sta SA jsr injest_comma bcs got_secondaryaddress jsr basic_parse_line_number lda basic_line_number+1 bne !+ lda basic_line_number+0 - sta current_secondary_address + sta SA jmp got_secondaryaddress !: // Second parameter is above 255, this can't be a secondary address diff --git a/c64/basic/select_device.s b/c64/basic/select_device.s index 30f15150..6d9a2e76 100644 --- a/c64/basic/select_device.s +++ b/c64/basic/select_device.s @@ -11,7 +11,7 @@ select_device: // Note: if tape support is introduced here, make sure DOS wedge won't get broken - ldx current_device_number + ldx FA cpx #$08 bcs !+ ldx #$08 diff --git a/c64/basic/wedge_dos.s b/c64/basic/wedge_dos.s index 28785111..40650383 100644 --- a/c64/basic/wedge_dos.s +++ b/c64/basic/wedge_dos.s @@ -74,7 +74,7 @@ wedge_dos_change_drive: bcs !+ jmp do_ILLEGAL_DEVICE_NUMBER_error !: - sta current_device_number + sta FA jmp basic_end_of_line wedge_dos_status_get: @@ -139,7 +139,7 @@ wedge_dos_directory: // First change the secondary address to the one suitable for // directory loading lda #$00 // logical device number - ldx current_device_number + ldx FA ldy #$60 jsr JSETFLS diff --git a/c64/kernal/,aliases.s b/c64/kernal/,aliases.s index 286d92da..528f852f 100644 --- a/c64/kernal/,aliases.s +++ b/c64/kernal/,aliases.s @@ -1,43 +1,5 @@ -// Names of ZP and low memory locations -// (Only those of relevance for the KERNAL) -// (And only those for now that we feel the need to implement initially) -// (https://www.c64-wiki.com/wiki/Zeropage) -// XXX get rid of this file, use ,aliases_ram_lowmem.s instead - - .label current_file_num = $98 - .label input_device_number = DFLTN - .label cassette_buffer_bytes_used = $A6 - .label load_or_scroll_temp_pointer = $AC - // We also use the following for temp colour pointer when scrolling - .label load_save_verify_end_address = $AE - .label current_logical_filenum = $B8 - .label current_secondary_address = $B9 - .label current_device_number = $BA - .label current_filename_ptr = $BB - .label load_save_end_ptr = $C3 - .label last_key_matrix_position = $C5 - .label keys_in_key_buffer = $C6 - .label reverse_video_flag = $C7 - .label end_of_input_line = $C8 - .label start_of_keyboard_input = $C9 - .label current_key_index_entry = $CB - .label cursor_blink_disable = $CC - .label cursor_blink_countdown = $CD - .label cursor_saved_character = $CE - .label cursor_is_visible = $CF - .label keyboard_input_ready = $D0 - .label current_screen_line_ptr = $D1 - .label current_screen_x = $D3 - .label logical_line_length = $D5 - .label current_screen_y = $D6 - .label last_printed_character_ascii = $D7 - .label insert_mode = $D8 - // Bits 0 -3 = bits 8-11 of screen line address - // Bit 7 = line spans multiple physical lines - .label screen_line_link_table = $D9 - .label current_screen_line_colour_ptr = $F3 - .label keyboard_decoding_table_ptr = $F5 +// XXX get rid of this file #if CONFIG_MEMORY_MODEL_60K diff --git a/c64/kernal/blink_cursor.s b/c64/kernal/blink_cursor.s index 1f64e898..5d3c5446 100644 --- a/c64/kernal/blink_cursor.s +++ b/c64/kernal/blink_cursor.s @@ -1,93 +1,96 @@ // We have the following variables: -// cursor_blink_disable -// cursor_blink_countdown -// cursor_saved_character -// cursor_is_visible +// BLNSW (cursor blink switch) +// BLNCT (cursor blink countdown) +// GDBLN (cursor saved character) +// BLNON (if cursor is visible) // GDCOL (colour under cursor) +// USER (current screen line colour pointer) +// PNT (current screen line pointer) +// PNTR (current screen x position) show_cursor_if_enabled: - lda cursor_blink_disable + lda BLNSW beq !+ rts -!: lda cursor_is_visible +!: lda BLNON beq show_cursor rts - + show_cursor: // Set cursor as though it had just finished the off phase, // so that the call to blink_cursor paints it lda #$00 - sta cursor_blink_countdown - sta cursor_is_visible + sta BLNCT + sta BLNON jsr blink_cursor // Then set the timeout to 1 frame, so that the cursor // blinks under key repeat conditions, like on the original KERNAL lda #$01 - sta cursor_blink_countdown + sta BLNCT rts - + blink_cursor: // Is the cursor enabled? - lda cursor_blink_disable + lda BLNSW bne no_blink_cursor // Do we need to redraw things? - dec cursor_blink_countdown + dec BLNCT bpl no_blink_cursor // Check if cursor was visible or not, and toggle - lda cursor_is_visible + lda BLNON bne undraw_cursor draw_cursor: jsr calculate_screen_line_pointer - ldy current_screen_x - lda (current_screen_line_ptr),y - sta cursor_saved_character + ldy PNTR + lda (PNT),y + sta GDBLN eor #$80 - sta (current_screen_line_ptr),y + sta (PNT),y // Also set cursor colour - lda (current_screen_line_colour_ptr),y + lda (USER),y sta GDCOL lda COLOR - sta (current_screen_line_colour_ptr),y - + sta (USER),y + lda #1 - sta cursor_is_visible - + sta BLNON + jmp reset_blink_timer undraw_cursor: jsr calculate_screen_line_pointer - lda cursor_saved_character - ldy current_screen_x - sta (current_screen_line_ptr),y + lda GDBLN + ldy PNTR + sta (PNT),y lda GDCOL - sta (current_screen_line_colour_ptr),y + sta (USER),y lda #0 - sta cursor_is_visible + sta BLNON // Fall through reset_blink_timer: // Rest blink counter // (Compute's Mapping the 64, p39-40) lda #20 - sta cursor_blink_countdown + sta BLNCT no_blink_cursor: rts disable_cursor: lda #$80 - sta cursor_blink_disable + sta BLNSW // FALL THROUGH hide_cursor_if_visible: - lda cursor_is_visible + lda BLNON bne undraw_cursor rts enable_cursor: lda #$00 - sta cursor_blink_disable + sta BLNSW rts diff --git a/c64/kernal/chrin_real.s b/c64/kernal/chrin_real.s index 741534e5..cbed585e 100644 --- a/c64/kernal/chrin_real.s +++ b/c64/kernal/chrin_real.s @@ -52,18 +52,18 @@ chrin_repeat: // If so, return the next byte, and clear the flag when we reach the end. // Do we have a line of input waiting? - lda keyboard_input_ready + lda CRSW beq read_from_keyboard - // Yes, we have input waiting at (start_of_keyboard_input)+keyboard_input_ready - // When keyboard_input_ready = end_of_input_line, then we return a carriage return + // Yes, we have input waiting at (LXSP)+CRSW + // When CRSW = INDX, then we return a carriage return // and clear the flag - cmp end_of_input_line + cmp INDX bne not_end_of_input // Return carriage return and clear pending input flag lda #$00 - sta keyboard_input_ready + sta CRSW pla tax clc @@ -75,9 +75,9 @@ not_end_of_input: tay pla tax - lda (start_of_keyboard_input),y + lda (LXSP),y jsr screen_code_to_petscii - inc keyboard_input_ready + inc CRSW clc rts @@ -87,7 +87,7 @@ read_from_keyboard: jsr enable_cursor // Wait for a key - lda keys_in_key_buffer + lda NDX beq chrin_repeat lda KEYD @@ -106,10 +106,10 @@ read_from_keyboard: // (Compute's Mapping the 64, p96) // Set pointer to line of input - lda current_screen_line_ptr+0 - sta start_of_keyboard_input+0 - lda current_screen_line_ptr+1 - sta start_of_keyboard_input+1 + lda PNT+0 + sta LXSP+0 + lda PNT+1 + sta LXSP+1 // Calculate length jsr get_current_line_logical_length @@ -117,18 +117,18 @@ read_from_keyboard: iny !: dey bmi empty_line - lda (current_screen_line_ptr),y + lda (PNT),y cmp #$20 beq !- iny - sty end_of_input_line + sty INDX lda #$01 - sta keyboard_input_ready + sta CRSW // Return first char of line ldy #$00 pla tax - lda (start_of_keyboard_input),y + lda (LXSP),y jsr screen_code_to_petscii clc rts @@ -166,7 +166,7 @@ pop_keyboard_buffer: iny cpy XMAX bne !- - dec keys_in_key_buffer + dec NDX cli rts diff --git a/c64/kernal/chrout_real.s b/c64/kernal/chrout_real.s index 03d2b849..e1ce3c2c 100644 --- a/c64/kernal/chrout_real.s +++ b/c64/kernal/chrout_real.s @@ -11,7 +11,7 @@ chrout_real: - sta last_printed_character_ascii + sta SCHAR // Save X and Y values // (Confirmed by writing a test program that X and Y @@ -34,7 +34,7 @@ chrout_real: chrout_iec: - lda last_printed_character_ascii + lda SCHAR jsr JCIOUT bcc chrout_done @@ -77,7 +77,7 @@ chrout_done: tay pla tax - lda last_printed_character_ascii + lda SCHAR clc // indicate success rts @@ -88,7 +88,7 @@ chrout_screen: jsr hide_cursor_if_visible - lda last_printed_character_ascii + lda SCHAR tax // Check for special characters @@ -111,7 +111,7 @@ not_0a: // RETURN clears quote and insert modes lda #$00 sta QTSW - sta insert_mode + sta INSRT jmp screen_advance_to_next_line not_0d: @@ -125,7 +125,7 @@ not_0d: cmp #79 bne definitely_not_too_long tay - lda (current_screen_line_ptr),y + lda (PNT),y cmp #$20 beq definitely_not_too_long @@ -135,7 +135,7 @@ not_0d: definitely_not_too_long: // Work out if line needs to be expanded, and if so expand it ldy #39 - lda (current_screen_line_ptr),y + lda (PNT),y cmp #$20 beq no_need_to_extend @@ -155,89 +155,89 @@ no_need_to_extend: // though we really don't believe that the routine can be copyrighted // due to the lack of creativity. dey - lda (current_screen_line_colour_ptr),y + lda (USER),y iny - sta (current_screen_line_colour_ptr),y + sta (USER),y dey - lda (current_screen_line_ptr),y + lda (PNT),y iny - sta (current_screen_line_ptr),y + sta (PNT),y dey - cpy current_screen_x + cpy PNTR bne !- // Increase insert mode count (which causes quote-mode like behaviour) - inc insert_mode - + inc INSRT + // Put space in the inserted gap lda #$20 - sta (current_screen_line_ptr),y + sta (PNT),y jmp chrout_done not_94: // DELETE in insert mode embeds control character - ldx insert_mode + ldx INSRT bne not_14 cmp #$14 bne not_14 // Delete - ldx current_screen_x + ldx PNTR bne delete_non_zero_column delete_at_column_0: - ldy current_screen_y + ldy TBLX bne not_row_0 // delete from row 0, col 0 does nothing jmp chrout_done not_row_0: // Column 0 delete just moves us to the end of the // previous line, without actually deleting anything - dec current_screen_y + dec TBLX jsr get_current_line_logical_length - lda logical_line_length - - sta current_screen_x + lda LNMX + + sta PNTR jsr calculate_screen_line_pointer jmp chrout_done delete_non_zero_column: // Copy rest of line down jsr get_current_line_logical_length - ldy current_screen_x - cpy logical_line_length + ldy PNTR + cpy LNMX beq done_delete dey !: iny - lda (current_screen_line_ptr),y + lda (PNT),y dey - sta (current_screen_line_ptr),y + sta (PNT),y iny - lda (current_screen_line_colour_ptr),y + lda (USER),y dey - sta (current_screen_line_colour_ptr),y + sta (USER),y iny - cpy logical_line_length + cpy LNMX bne !- // Clear char at end of line jsr get_current_line_logical_length tay lda #$20 - sta (current_screen_line_ptr),y + sta (PNT),y done_delete: - dec current_screen_x - jmp chrout_done + dec PNTR + jmp chrout_done not_14: // Check for quote mode ldx QTSW bne is_quote_mode - ldx insert_mode + ldx INSRT bne is_quote_mode jmp not_quote_mode @@ -283,24 +283,24 @@ colour_check_loop: cmp #$12 bne not_12 lda #$80 - sta reverse_video_flag + sta RVS jmp chrout_done not_12: // Compute's Mapping the 64 p 38 cmp #$92 bne not_92 lda #$00 - sta reverse_video_flag + sta RVS jmp chrout_done not_92: // Check for cursor movement keys cmp #$11 bne not_11 - lda current_screen_x + lda PNTR clc adc #40 - sta current_screen_x + sta PNTR // We need to advance the pointer manually, as normalising // now will break things. The pointer update is required // so that we can tell if we really are on the bottom phys @@ -311,22 +311,22 @@ not_92: not_11: cmp #$1d bne not_1d - inc current_screen_x + inc PNTR jsr calculate_screen_line_pointer jmp chrout_done not_1d: cmp #$91 bne not_91 - lda current_screen_x + lda PNTR sec sbc #40 - sta current_screen_x + sta PNTR jsr calculate_screen_line_pointer jmp chrout_done not_91: cmp #$9d bne not_9d - dec current_screen_x + dec PNTR jsr calculate_screen_line_pointer jmp chrout_done not_9d: @@ -335,8 +335,8 @@ not_9d: cmp #$13 bne not_13 lda #0 - sta current_screen_x - sta current_screen_y + sta PNTR + sta TBLX jsr calculate_screen_line_pointer jmp chrout_done not_13: @@ -401,14 +401,14 @@ output_literal_char: pha - ldy current_screen_x - ora reverse_video_flag // Compute's Mapping the 64 p38 - sta (current_screen_line_ptr),y + ldy PNTR + ora RVS // Compute's Mapping the 64 p38 + sta (PNT),y // Decrement number of chars waiting to be inserted - lda insert_mode + lda INSRT beq !+ - dec insert_mode + dec INSRT !: pla cmp #$22 @@ -423,36 +423,36 @@ not_quote: // Set colour lda COLOR - sta (current_screen_line_colour_ptr),y + sta (USER),y // Advance the column, and scroll screen down if we need // to insert a 2nd line in this logical line. // (eg Compute's Mapping the 64 p41) - ldx current_screen_y + ldx TBLX iny - sty current_screen_x + sty PNTR cpy #40 bne !+ jsr screen_grow_logical_line - ldy current_screen_x + ldy PNTR !: cpy #80 bcc no_screen_advance_to_next_line lda #0 - sta current_screen_x + sta PNTR jmp screen_advance_to_next_line no_screen_advance_to_next_line: jmp chrout_done screen_grow_logical_line: - ldy current_screen_y + ldy TBLX // Don't grow line if it is already grown - lda screen_line_link_table,y + lda LDTBL,y bpl !+ jmp done_grow_line !: lda #$80 - sta screen_line_link_table,y + sta LDTBL,y // Now make space for the extra line added. // If we are on the last physical line of the screen, @@ -471,11 +471,11 @@ screen_grow_logical_line: ldy #0 count_rows_loop: dex - lda screen_line_link_table,y + lda LDTBL,y bpl !+ dex !: iny - cpy current_screen_y + cpy TBLX bne count_rows_loop cpx #0 @@ -493,28 +493,28 @@ count_rows_loop: lda HIBASE clc adc #3 - sta current_screen_line_ptr+1 - sta load_or_scroll_temp_pointer+1 + sta PNT+1 + sta SAL+1 lda #>$DBC0 - sta load_save_verify_end_address+1 - sta current_screen_line_colour_ptr+1 + sta EAL+1 + sta USER+1 lda #<$03C0 - sta current_screen_line_ptr+0 - sta current_screen_line_colour_ptr+0 + sta PNT+0 + sta USER+0 // souce address is line above sec sbc #40 - sta load_or_scroll_temp_pointer+0 - sta load_save_verify_end_address+0 + sta SAL+0 + sta EAL+0 copy_line_down_loop: ldy #39 cl_inner: - lda (load_save_verify_end_address),y - sta (current_screen_line_colour_ptr),y - lda (load_or_scroll_temp_pointer),y - sta (current_screen_line_ptr),y + lda (EAL),y + sta (USER),y + lda (SAL),y + sta (PNT),y dey bpl cl_inner @@ -523,29 +523,29 @@ cl_inner: // Old source is new destination // Use different registers to minimise byte similarity with C64 KERNAl - ldy load_or_scroll_temp_pointer+1 - sty current_screen_line_ptr+1 - lda load_save_verify_end_address+1 - ldy load_or_scroll_temp_pointer+0 - sta current_screen_line_colour_ptr+1 - sty current_screen_line_ptr+0 - sty current_screen_line_colour_ptr+0 + ldy SAL+1 + sty PNT+1 + lda EAL+1 + ldy SAL+0 + sta USER+1 + sty PNT+0 + sty USER+0 // Decrementing source pointers - lda load_or_scroll_temp_pointer+0 + lda SAL+0 sec sbc #<40 - sta load_or_scroll_temp_pointer+0 - sta load_save_verify_end_address+0 - lda load_or_scroll_temp_pointer+1 + sta SAL+0 + sta EAL+0 + lda SAL+1 sbc #>40 - sta load_or_scroll_temp_pointer+1 + sta SAL+1 // convert to screen equivalent sec sbc HIBASE clc adc #>$D800 - sta load_save_verify_end_address+1 + sta EAL+1 dex bne copy_line_down_loop @@ -557,9 +557,9 @@ no_copy_down: ldy #79 !: lda COLOR - sta (current_screen_line_colour_ptr),y + sta (USER),y lda #$20 - sta (current_screen_line_ptr),y + sta (PNT),y dey cpy #40 bne !- @@ -575,163 +575,163 @@ scroll_up_if_on_last_line: // Colour RAM is always in fixed place, so is easiest // to use to check if we are on the last line. // The last line is at $D800 + 24*40 = $DBC0 - lda current_screen_line_colour_ptr+1 + lda USER+1 cmp #>$DBC0 bne not_last_line - lda current_screen_line_colour_ptr+0 + lda USER+0 cmp #<$DBC0 beq is_last_line - + jsr get_current_line_logical_length clc - adc current_screen_line_colour_ptr+0 + adc USER+0 cmp #<$DBE7-1 - bcc not_last_line + bcc not_last_line -is_last_line: - - dec current_screen_y +is_last_line: + + dec TBLX // FALL THROUGH -scroll_screen_up: +scroll_screen_up: // Now scroll the whole screen up either one or two lines // based on whether the first screen line is linked or not. - + // Get pointers to start of screen + colour RAM lda HIBASE - sta current_screen_line_ptr+1 - sta load_or_scroll_temp_pointer+1 + sta PNT+1 + sta SAL+1 lda #>$D800 - sta current_screen_line_colour_ptr+1 - sta load_save_verify_end_address+1 + sta USER+1 + sta EAL+1 lda #$00 - sta current_screen_line_ptr+0 - sta current_screen_line_colour_ptr+0 + sta PNT+0 + sta USER+0 // Get pointers to screen/colour RAM source - lda screen_line_link_table+0 + lda LDTBL+0 bmi !+ lda #40 .byte $2C // BIT $nnnn to skip next instruction !: lda #80 - sta load_or_scroll_temp_pointer+0 - sta load_save_verify_end_address+0 + sta SAL+0 + sta EAL+0 // Copy first three pages ldy #$00 ldx #3 scroll_copy_loop: - lda (load_save_verify_end_address),y - sta (current_screen_line_colour_ptr),y - lda (load_or_scroll_temp_pointer),y - sta (current_screen_line_ptr),y + lda (EAL),y + sta (USER),y + lda (SAL),y + sta (PNT),y iny bne scroll_copy_loop - inc load_or_scroll_temp_pointer+1 - inc current_screen_line_ptr+1 - inc load_save_verify_end_address+1 - inc current_screen_line_colour_ptr+1 + inc SAL+1 + inc PNT+1 + inc EAL+1 + inc USER+1 dex bne scroll_copy_loop // Copy last partial page // We need to copy 1000-(3*256)-line length // = 232 - line length - lda load_or_scroll_temp_pointer+0 + lda SAL+0 lda #232 sec - sbc load_or_scroll_temp_pointer+0 + sbc SAL+0 tax -scroll_copy_loop2: - lda (load_save_verify_end_address),y - sta (current_screen_line_colour_ptr),y - lda (load_or_scroll_temp_pointer),y - sta (current_screen_line_ptr),y +scroll_copy_loop2: + lda (EAL),y + sta (USER),y + lda (SAL),y + sta (PNT),y iny dex bne scroll_copy_loop2 // Fill in scrolled up area - ldx load_or_scroll_temp_pointer+0 + ldx SAL+0 scroll_copy_loop3: lda COLOR - sta (current_screen_line_colour_ptr),y + sta (USER),y lda #$20 - sta (current_screen_line_ptr),y + sta (PNT),y iny dex bne scroll_copy_loop3 - + // Shift line linkage list ldy #0 ldx #24 link_copy: - lda screen_line_link_table+1,y - sta screen_line_link_table+0,y + lda LDTBL+1,y + sta LDTBL+0,y iny dex bne link_copy // Clear line link flag of last line - stx screen_line_link_table+24 + stx LDTBL+24 // Restore correct line pointers jsr calculate_screen_line_pointer rts - + get_current_line_logical_length: - ldy current_screen_y - lda screen_line_link_table,y + ldy TBLX + lda LDTBL,y bpl line_not_linked_del lda #79 .byte $2c // BIT absolute mode, which we use to skip the next two instruction bytes line_not_linked_del: lda #39 - sta logical_line_length + sta LNMX rts - + screen_advance_to_next_line: // jsr hide_cursor_if_visible // Go to start of line lda #0 - sta current_screen_x + sta PNTR // Advance line number - ldy current_screen_y + ldy TBLX // Do quick fix to line pointer to work out if it is off // the bottom of the screen. ldx #40 - lda screen_line_link_table,y + lda LDTBL,y bmi !+ .byte $2c !: ldx #80 txa clc - adc current_screen_line_ptr+0 - sta current_screen_line_ptr+0 - lda current_screen_line_ptr+1 + adc PNT+0 + sta PNT+0 + lda PNT+1 adc #0 - sta current_screen_line_ptr+1 - - inc current_screen_y - + sta PNT+1 + + inc TBLX + // Check if it will trigger scrolling // Work out if we have gone off the bottom of the screen? // 1040 > 1024, so if high byte of screen pointer is >= (HIBASE+4), // then we are off the bottom of the screen - lda current_screen_line_ptr+1 + lda PNT+1 sec sbc HIBASE cmp #3 bcc !+ - lda current_screen_line_ptr+0 + lda PNT+0 cmp #$e7 bcc !+ @@ -744,83 +744,82 @@ screen_advance_to_next_line: jmp chrout_done add_40_to_screen_x: - lda current_screen_x + lda PNTR clc adc #40 - sta current_screen_x + sta PNTR rts normalise_screen_x_y: // Normalise X and Y values // If X < 0, then make X = X + 40 (or 80, if previous line is linked) -!: lda current_screen_x +!: lda PNTR bpl x_not_negative - dec current_screen_y + dec TBLX // Check that we didn't go backwards off the top of the screen bpl !+ lda #0 - sta current_screen_y + sta TBLX !: jsr add_40_to_screen_x // Check if line is linked, if so, add 40 again - ldy current_screen_y - lda screen_line_link_table,y + ldy TBLX + lda LDTBL,y bpl !+ jsr add_40_to_screen_x !: x_not_negative: // Work out if X is too big - ldy current_screen_y - lda screen_line_link_table,y + ldy TBLX + lda LDTBL,y bpl !+ lda #79 .byte $2C // BIT $nnnn, used to skip next instruction !: lda #39 - cmp current_screen_x + cmp PNTR bcs x_not_too_big // X value is too big, so subtract 40 and increment Y - lda current_screen_x + lda PNTR sec sbc #40 - sta current_screen_x - inc current_screen_y + sta PNTR + inc TBLX x_not_too_big: // Make sure Y isn't negative - lda current_screen_y + lda TBLX bpl !+ lda #0 - sta current_screen_y + sta TBLX !: // Make sure Y isn't too large for absolute size of // screen cmp #24 bcc !+ lda #24 - sta current_screen_y + sta TBLX !: // Make sure Y isn't too much for the screen, taking // into account the line link table ldy #24 // max allowable line ldx #0 link_count_loop: - lda screen_line_link_table,x + lda LDTBL,x bpl !+ dey !: inx cpx #25 bne link_count_loop tya - cmp current_screen_y + cmp TBLX bcs y_ok - sta current_screen_y -y_ok: - + sta TBLX +y_ok: rts calculate_screen_line_pointer: @@ -828,12 +827,12 @@ calculate_screen_line_pointer: // Reset pointer to start of screen lda HIBASE - sta current_screen_line_ptr+1 + sta PNT+1 lda #0 - sta current_screen_line_ptr+0 + sta PNT+0 // Add 40 for every line, or 80 if the lines are linked - ldx current_screen_y + ldx TBLX !: // Stop if we have counted enough lines @@ -844,18 +843,18 @@ calculate_screen_line_pointer: ldy #40 // -1 offset is because we count down from N to 1, not // N-1 to 0. - lda screen_line_link_table-1,x + lda LDTBL-1,x bpl cslp_l1 ldy #80 cslp_l1: // Add computed line length to pointer value tya clc - adc current_screen_line_ptr+0 - sta current_screen_line_ptr+0 - lda current_screen_line_ptr+1 + adc PNT+0 + sta PNT+0 + lda PNT+1 adc #0 - sta current_screen_line_ptr+1 + sta PNT+1 // Loop back to next line dex @@ -864,38 +863,38 @@ cslp_l1: // FALL THROUGH -update_colour_line_pointer: +update_colour_line_pointer: // Now setup pointer to colour RAM - lda current_screen_line_ptr+0 - sta current_screen_line_colour_ptr+0 - lda current_screen_line_ptr+1 + lda PNT+0 + sta USER+0 + lda PNT+1 sec sbc HIBASE clc adc #>$d800 - sta current_screen_line_colour_ptr+1 - + sta USER+1 + rts - - + + advance_screen_pointer_40_bytes: - lda current_screen_line_ptr+0 + lda PNT+0 clc adc #<40 - sta current_screen_line_ptr+0 - sta current_screen_line_colour_ptr+0 - lda current_screen_line_ptr+1 + sta PNT+0 + sta USER+0 + lda PNT+1 adc #>40 - sta current_screen_line_ptr+1 + sta PNT+1 sec sbc HIBASE clc adc #>$D800 - sta current_screen_line_colour_ptr+1 + sta USER+1 jmp update_colour_line_pointer - -colour_codes: + +colour_codes: // consider moving them to separate location // CHR$ codes for the 16 colours .byte 144,5,28,159,156,30,31,158 .byte 129,149,150,151,152,153,154,155 diff --git a/c64/kernal/cint_real.s b/c64/kernal/cint_real.s index a312cf6c..1daf056c 100644 --- a/c64/kernal/cint_real.s +++ b/c64/kernal/cint_real.s @@ -69,7 +69,7 @@ cint_brk: // entry for BRK and STOP+RESTORE - XXX, where should it start? // Initialise cursor blink flags (Compute's Mapping the 64 p215) lda #$00 - sta cursor_blink_disable + sta BLNSW // Set keyboard decode vector (Compute's Mapping the 64 p215) diff --git a/c64/kernal/e544.clear_screen.s b/c64/kernal/e544.clear_screen.s index e699f2ec..90d1999d 100644 --- a/c64/kernal/e544.clear_screen.s +++ b/c64/kernal/e544.clear_screen.s @@ -9,7 +9,7 @@ clear_screen: lda #$00 ldy #24 clearscreen_l1: - sta screen_line_link_table,y + sta LDTBL,y dey bpl clearscreen_l1 @@ -19,28 +19,28 @@ clearscreen_l1: // We should do this at HIBASE, which annoyingly // is no ZP, so we need to make a vector // (Compute's Mapping the 64 p216) - // Get pointer to the screen into current_screen_line_ptr + // Get pointer to the screen into PNT // as it is the first appropriate place for it found when // searching through the ZP allocations listed in // Compute's Mapping the 64 - sta current_screen_line_ptr+0 + sta PNT+0 lda HIBASE - sta current_screen_line_ptr+1 + sta PNT+1 ldx #$03 // countdown for pages to update iny // Y now = #$00 lda #$20 // space character clearscreen_l2: - sta (current_screen_line_ptr),y + sta (PNT),y iny bne clearscreen_l2 // To draw only 1000 bytes, add 250 to address each time - lda current_screen_line_ptr + lda PNT clc adc #<250 - sta current_screen_line_ptr - lda current_screen_line_ptr+1 + sta PNT + lda PNT+1 adc #>250 - sta current_screen_line_ptr+1 + sta PNT+1 lda #$20 // get space character again dex bpl clearscreen_l2 diff --git a/c64/kernal/f13e.getin.s b/c64/kernal/f13e.getin.s index c5f6b713..5eefc0ac 100644 --- a/c64/kernal/f13e.getin.s +++ b/c64/kernal/f13e.getin.s @@ -13,7 +13,7 @@ GETIN: // Wait for a key - lda keys_in_key_buffer + lda NDX bne !+ // Nothing in keyboard buffer to read diff --git a/c64/kernal/f34a.open.s b/c64/kernal/f34a.open.s index 65b03974..02ce3ac9 100644 --- a/c64/kernal/f34a.open.s +++ b/c64/kernal/f34a.open.s @@ -20,7 +20,7 @@ OPEN: beq !+ dey lda LAT, y - cmp current_logical_filenum + cmp LA bne open_not_yet_open jmp kernalerror_FILE_ALREADY_OPEN open_not_yet_open: @@ -43,11 +43,11 @@ open_has_space: // LAT / FAT / SAT support implemented according to // 'Compute's Mapping the Commodore 64', page 52 - lda current_logical_filenum + lda LA sta LAT, y - lda current_device_number + lda FA sta FAT, y - lda current_secondary_address + lda SA sta SAT, y iny @@ -58,7 +58,7 @@ open_has_space: beq open_done_success // Check for IEC device - lda current_device_number + lda FA jsr iec_check_devnum bcc open_iec @@ -75,7 +75,7 @@ open_iec: bcc !+ jmp kernalerror_DEVICE_NOT_FOUND !: - lda current_secondary_address + lda SA jsr iec_cmd_open bcc !+ jmp kernalerror_DEVICE_NOT_FOUND diff --git a/c64/kernal/f4a5.load.s b/c64/kernal/f4a5.load.s index 1cfc2d3b..87e43c10 100644 --- a/c64/kernal/f4a5.load.s +++ b/c64/kernal/f4a5.load.s @@ -40,7 +40,7 @@ LOAD: TARGET_HOOK_LOAD() // Check whether we support the requested device - lda current_device_number + lda FA and #$FC bne !+ jmp lvs_illegal_device_number // device number below 4, not an IEC device @@ -60,7 +60,7 @@ LOAD: // in the C64, only in the drive. // Call device to LISTEN (p16) - lda current_device_number + lda FA jsr LISTEN bcc !+ jmp lvs_device_not_found_error // XXX deduplicate with other jumps in this routine @@ -77,7 +77,7 @@ LOAD: jmp lvs_load_verify_error // XXX deduplicate with other jumps in this routine !: // Now command device to talk (p16) - lda current_device_number + lda FA jsr TALK bcc !+ jmp lvs_load_verify_error // XXX deduplicate with other jumps in this routine @@ -99,7 +99,7 @@ LOAD: bcc !+ jmp lvs_file_not_found_error // XXX deduplicate with other jumps in this routine !: - ldx current_secondary_address + ldx SA beq !+ sta STAL+0 !: @@ -107,7 +107,7 @@ LOAD: bcc !+ jmp lvs_file_not_found_error // XXX deduplicate with other jumps in this routine !: - ldx current_secondary_address + ldx SA beq !+ sta STAL+1 !: @@ -140,7 +140,7 @@ load_loop: // Close file on drive - lda current_device_number + lda FA jsr close_load // Return last address diff --git a/c64/kernal/home_cursor.s b/c64/kernal/home_cursor.s index 0e833d94..37965f96 100644 --- a/c64/kernal/home_cursor.s +++ b/c64/kernal/home_cursor.s @@ -4,7 +4,7 @@ home_cursor: lda #$00 - sta current_screen_x - sta current_screen_y + sta PNTR // x position + sta TBLX // y position jmp set_pointer_to_current_screen_line diff --git a/c64/kernal/lvs_helpers.s b/c64/kernal/lvs_helpers.s index c74295a2..b4984825 100644 --- a/c64/kernal/lvs_helpers.s +++ b/c64/kernal/lvs_helpers.s @@ -10,10 +10,10 @@ lvs_send_file_name_loop: beq lvs_send_file_name_done #if CONFIG_MEMORY_MODEL_60K - ldx #40 - sta current_screen_line_ptr+1 + sta PNT+1 dex bpl sptcsl_l2 diff --git a/c64/kernal/setfls.s b/c64/kernal/setfls.s index 44c7ab8b..d57f770b 100644 --- a/c64/kernal/setfls.s +++ b/c64/kernal/setfls.s @@ -12,9 +12,9 @@ SETFLS: // There are 6 sane ways to implement this routine, // I hope this one won't cause similarity to CBM code - - sta current_logical_filenum - sty current_secondary_address - stx current_device_number - + + sta LA + sty SA + stx FA + rts