diff --git a/src/kernal/screen/chrout_screen_shift_onoff.s b/src/kernal/screen/chrout_screen_shift_onoff.s index 24369ada..0058e836 100644 --- a/src/kernal/screen/chrout_screen_shift_onoff.s +++ b/src/kernal/screen/chrout_screen_shift_onoff.s @@ -11,11 +11,13 @@ chrout_screen_SHIFT_ON: lda #$00 // enable SHIFT+VENDOR combination -!: - sta MODE - jmp chrout_screen_done + skip_2_bytes_trash_nvz + + // FALLTROUGH chrout_screen_SHIFT_OFF: lda #$80 // disable SHIFT+VENDOR combination - bne !- // branch always + + sta MODE + jmp chrout_screen_done diff --git a/src/kernal/screen_m65/mega65_chrout_screen_control.s b/src/kernal/screen_m65/mega65_chrout_screen_control.s index 867fa58c..55cf1b07 100644 --- a/src/kernal/screen_m65/mega65_chrout_screen_control.s +++ b/src/kernal/screen_m65/mega65_chrout_screen_control.s @@ -73,81 +73,6 @@ m65_chrout_try_color_loop: - -// XXX: consider moving to separate files - -m65_chrout_screen_RETURN: - - // RETURN clears quote and insert modes, it also clears reverse flag - - lda #$00 - sta QTSW - sta INSRT - sta RVS - - // XXX should we clear special colour attributes too? - - // Move cursor to the beginning of the next line - - sta M65__TXTCOL - inc M65__TXTROW - - // Correct the column/row values - - jmp m65_chrout_fix_column_row - - - - -m65_chrout_screen_RVS_ON: - - lda #$80 - skip_2_bytes_trash_nvz - - // FALLTROUGH - -m65_chrout_screen_RVS_OFF: - - lda #$00 - - sta RVS - jmp m65_chrout_screen_done - - - -m65_chrout_screen_CRSR_RIGHT: - - inc M65__TXTCOL - skip_2_bytes_trash_nvz - - // FALLTROUGH - -m65_chrout_screen_CRSR_LEFT: - - dec M65__TXTCOL - skip_2_bytes_trash_nvz - - // FALLTROUGH - -m65_chrout_screen_CRSR_DOWN: - - inc M65__TXTROW - skip_2_bytes_trash_nvz - - // FALLTROUGH - -m65_chrout_screen_CRSR_UP: - - dec M65__TXTROW - - // Correct the column/row values - - jmp m65_chrout_fix_column_row - - - - - // XXX: implement screen routines below: m65_chrout_screen_quote: @@ -156,14 +81,6 @@ m65_chrout_screen_CLR: nop m65_chrout_screen_HOME: nop -m65_chrout_screen_SHIFT_OFF: - nop -m65_chrout_screen_SHIFT_ON: - nop -m65_chrout_screen_TXT: - nop -m65_chrout_screen_GFX: - nop m65_chrout_screen_INS: nop m65_chrout_screen_TAB: diff --git a/src/kernal/screen_m65/mega65_chrout_screen_control_1.s b/src/kernal/screen_m65/mega65_chrout_screen_control_1.s new file mode 100644 index 00000000..07db19f4 --- /dev/null +++ b/src/kernal/screen_m65/mega65_chrout_screen_control_1.s @@ -0,0 +1,58 @@ +// #LAYOUT# M65 KERNAL_1 #TAKE +// #LAYOUT# * * #IGNORE + + +// Cursor movement + +m65_chrout_screen_CRSR_RIGHT: + + inc M65__TXTCOL + skip_2_bytes_trash_nvz + + // FALLTROUGH + +m65_chrout_screen_CRSR_LEFT: + + dec M65__TXTCOL + skip_2_bytes_trash_nvz + + // FALLTROUGH + +m65_chrout_screen_CRSR_DOWN: + + inc M65__TXTROW + skip_2_bytes_trash_nvz + + // FALLTROUGH + +m65_chrout_screen_CRSR_UP: + + dec M65__TXTROW + jmp_8 m65_chrout_screen_ctrl1_end + + +// 'RETURN' key + +m65_chrout_screen_RETURN: + + // RETURN clears quote and insert modes, it also clears reverse flag + + lda #$00 + sta QTSW + sta INSRT + sta RVS + + // XXX should we clear special colour attributes too? + + // Move cursor to the beginning of the next line + + sta M65__TXTCOL + inc M65__TXTROW + + // FALLTROUGH + +m65_chrout_screen_ctrl1_end: + + // Correct the column/row values + + jmp m65_chrout_fix_column_row diff --git a/src/kernal/screen_m65/mega65_chrout_screen_control_2.s b/src/kernal/screen_m65/mega65_chrout_screen_control_2.s new file mode 100644 index 00000000..8ebfcfa2 --- /dev/null +++ b/src/kernal/screen_m65/mega65_chrout_screen_control_2.s @@ -0,0 +1,58 @@ +// #LAYOUT# M65 KERNAL_1 #TAKE +// #LAYOUT# * * #IGNORE + + +// 'REVERSE' mode support + +m65_chrout_screen_RVS_ON: + + lda #$80 + skip_2_bytes_trash_nvz + + // FALLTROUGH + +m65_chrout_screen_RVS_OFF: + + lda #$00 + + sta RVS + + // FALLTROUGH + +m65_chrout_screen_ctrl2_end: + + jmp m65_chrout_screen_done + + +// 'SHIFT ON/OFF' support + +m65_chrout_screen_SHIFT_ON: + + lda #$00 // enable SHIFT+VENDOR combination + skip_2_bytes_trash_nvz + + // FALLTROUGH + +m65_chrout_screen_SHIFT_OFF: + + lda #$80 // disable SHIFT+VENDOR combination + + sta MODE + jmp_8 m65_chrout_screen_ctrl2_end + + +// GFX/TXT switching support + +m65_chrout_screen_GFX: + + lda VIC_YMCSB + and #$02 // to upper case +!: + sta VIC_YMCSB + jmp_8 m65_chrout_screen_ctrl2_end + +m65_chrout_screen_TXT: + + lda VIC_YMCSB + ora #$02 // to lower case + bne !- // branch always