initial support for MEGA65 screen control codes

This commit is contained in:
FeralChild64 committed 2020-08-22 16:49:05 +02:00
1 parent 175c40c512
commit 6542f64a59
5 files changed
+175 -4

No files matched your search

+13 -2
View File
@@ -58,7 +58,7 @@ The following ROM features are currently missing:
| :----------------: | :------: | :------------------------------------------------: |
| C64 | DONE | |
| C128 | DONE | |
| Mega65 | NOT DONE | code should be complete, but is not tested yet |
| Mega65 | PARTIAL | code mostly complete, but not tested yet |
<br />
@@ -70,7 +70,7 @@ The following ROM features are currently missing:
| :----------------: | :------: | :------------------------------------------------: |
| VIC-II | DONE | |
| 80 columns, VDC | NOT DONE | |
| 80 columns, Mega65 | NOT DONE | |
| 80 columns, Mega65 | PARTIAL | work-in-progreess, not useable yet |
<br />
@@ -121,6 +121,17 @@ The following ROM features are currently missing:
<br />
## MEGA65 storage
<br />
| Driver | Status | Remarks |
| :----------------: | :------: | :-------------------------------------------------------------------------: |
| internal floppy | NOT DONE | try to reuse https://github.com/commanderx16/x16-rom/tree/master/dos |
| SD card access | NOT DONE | tryy to reuse https://github.com/commanderx16/x16-rom/tree/master/dos/fat32 |
<br />
## RS-232
* modems (telephone, WiFi)
+1
View File
@@ -23,6 +23,7 @@
.label clrchn_reset = KERNAL_0.clrchn_reset
.label udtim_keyboard = KERNAL_0.udtim_keyboard
.label chrout_to_screen_code = KERNAL_0.chrout_to_screen_code
.label colour_codes = KERNAL_0.colour_codes
.label setup_irq_timer = KERNAL_0.setup_irq_timer
.label wait_x_bars = KERNAL_0.wait_x_bars
@@ -93,4 +93,8 @@ m65_chrout_screen_literal: // entry point for m65_chrout_screen_quote
// XXX continue the implementation - fix the cursor position
m65_chrout_screen_done:
// XXX reenable cursor
rts
@@ -4,6 +4,126 @@
m65_chrout_screen_control:
// XXX provide implementation
txa
rts
m65_chrout_try_jumptable:
ldx #(__m65_chrout_screen_jumptable_codes_end - m65_chrout_screen_jumptable_codes - 1)
m65_chrout_try_jumptable_loop:
cpx #(__m65_chrout_screen_jumptable_quote_guard - m65_chrout_screen_jumptable_codes - 1)
bne m65_chrout_try_jumptable_loop_noquote
// Is this insert/quote mode?
tay
lda QTSW
ora INSRT
beq !+
tya
jmp m65_chrout_screen_quote
!:
tya
// FALLTROUGH
m65_chrout_try_jumptable_loop_noquote:
cmp m65_chrout_screen_jumptable_codes, x
bne !+
// Found, perform a jump to subroutine
txa
asl
tax
jmp (m65_chrout_screen_jumptable, x)
!:
dex
bpl m65_chrout_try_jumptable_loop
m65_chrout_try_COLOR:
ldx #$0F
m65_chrout_try_color_loop:
cmp colour_codes,x
bne !+
lda COLOR
and #$F0
sta COLOR
txa
ora COLOR
sta COLOR
jmp m65_chrout_screen_done
!:
dex
bpl m65_chrout_try_color_loop
// Unknown code, or key not requiring any handling
jmp m65_chrout_screen_done
// XXX: implement screen routines below:
m65_chrout_screen_quote:
nop
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_RVS_OFF:
nop
m65_chrout_screen_RVS_ON:
nop
m65_chrout_screen_CRSR_RIGHT:
nop
m65_chrout_screen_CRSR_LEFT:
nop
m65_chrout_screen_CRSR_DOWN:
nop
m65_chrout_screen_CRSR_UP:
nop
m65_chrout_screen_INS:
nop
m65_chrout_screen_TAB:
nop
m65_chrout_screen_LINE_FEED:
nop
m65_chrout_screen_UNDERLINE_ON:
nop
m65_chrout_screen_UNDERLINE_OFF:
nop
m65_chrout_screen_FLASHING_ON:
nop
m65_chrout_screen_FLASHING_OFF:
nop
m65_chrout_screen_TAB_SET_CLR:
nop
m65_chrout_screen_ESC:
nop
m65_chrout_screen_BELL:
nop
m65_chrout_screen_STOP:
nop
m65_chrout_screen_DEL:
nop
m65_chrout_screen_RETURN:
jmp m65_chrout_screen_done
@@ -89,3 +89,38 @@ __m65_chrout_screen_jumptable_quote_guard:
.byte KEY_RETURN
__m65_chrout_screen_jumptable_codes_end:
.const m65_chrout_list = List().add(
m65_chrout_screen_CLR,
m65_chrout_screen_HOME,
m65_chrout_screen_SHIFT_OFF,
m65_chrout_screen_SHIFT_ON,
m65_chrout_screen_TXT,
m65_chrout_screen_GFX,
m65_chrout_screen_RVS_OFF,
m65_chrout_screen_RVS_ON,
m65_chrout_screen_CRSR_RIGHT,
m65_chrout_screen_CRSR_LEFT,
m65_chrout_screen_CRSR_DOWN,
m65_chrout_screen_CRSR_UP,
m65_chrout_screen_INS,
m65_chrout_screen_TAB,
m65_chrout_screen_LINE_FEED,
m65_chrout_screen_UNDERLINE_ON,
m65_chrout_screen_UNDERLINE_OFF,
m65_chrout_screen_FLASHING_ON,
m65_chrout_screen_FLASHING_OFF,
m65_chrout_screen_TAB_SET_CLR,
m65_chrout_screen_ESC,
m65_chrout_screen_BELL,
m65_chrout_screen_STOP,
m65_chrout_screen_DEL,
m65_chrout_screen_RETURN
)
m65_chrout_screen_jumptable:
// Note: 65C02 has the page boundary vector bug fixed!
put_jumptable(m65_chrout_list)