started work on escape sequences, some cleanup

This commit is contained in:
FeralChild64 authored and FeralChild64 committed 2021-01-26 00:03:07 +01:00
1 parent 790807c369
commit f77496a724
8 files changed
+193 -26

No files matched your search

+8 -7
View File
@@ -64,13 +64,14 @@
!addr M65_TXTWIN_Y1 = $591 ; text window - bottom-right Y coordinate + 1
!addr M65_TXTROW_OFF = $592 ; $592-$593 offset to the current text row from the viewport start
!addr M65_SCRCOLMAX = $594 ; maximum allowed column
!addr M65_KB_BUCKY = $595 ; result of bucky keys scan
!addr M65_KB_COLSCAN = $596 ; $596-$59E results of keyboard scan, columns 0-8
!addr M65_JOYCRSR = $59F ; joystick to be used for cursor movement
!addr M65_KB_PRESSED = $560 ; $560-$562 keys pressed, used during scanning keyboard
!addr M65_KB_PRESSED_OLD = $563 ; $563-$565 keys pressed during previous scan
!addr M65_KB_PRESSED_NEW = $566 ; $566-$568 set of M65_KB_PRESSED minus M65_KB_PRESSED_OLD
; $569-$5EB -- UNUSED --
!addr M65_ESCMODE = $595 ; flag - if set, escape mode is in effect
!addr M65_KB_BUCKY = $596 ; result of bucky keys scan
!addr M65_KB_COLSCAN = $597 ; $597-$59F results of keyboard scan, columns 0-8
!addr M65_KB_PRESSED = $5A0 ; $5A0-$5A2 keys pressed, used during scanning keyboard
!addr M65_KB_PRESSED_OLD = $5A3 ; $5A3-$5A5 keys pressed during previous scan
!addr M65_KB_PRESSED_NEW = $5A6 ; $5A6-$5A8 set of M65_KB_PRESSED minus M65_KB_PRESSED_OLD
!addr M65_JOYCRSR = $5A9 ; joystick to be used for cursor movement
; $5AA-$5EB -- UNUSED --
!addr M65_DMAGIC_LIST = $5F1 ; $5EF-$5FF reserved for DMAgic list, 15 bytes (modulo bytes are not needed)
!addr M65_RS232_INBUF = $600 ; $600-$6FF -- reserved for RS-232 input buffer --
!addr M65_RS232_OUTBUF = $700 ; $700-$7FF -- reserved for RS-232 output buffer --
@@ -15,6 +15,11 @@ m65_chrout_screen:
lda SCHAR
tax
; Check for escape mode
bit M65_ESCMODE
+bmi m65_chrout_screen_escmode
; All the PETSCII control codes are within $0x, $1x, $8x, $9x, remaining
; ones are always printable characters; separate away control codes
@@ -89,12 +89,6 @@ m65_chrout_screen_FLASHING_OFF:
+nop
m65_chrout_screen_TAB_SET_CLR:
+nop
m65_chrout_screen_ESC:
+nop
m65_chrout_screen_BELL:
jmp m65_chrout_screen_done
; XXX: implement the following functionalities according to MEGA65 book:
; CTRL +T +Z +E +Q +G +J +U +W +B +N +M +] +I +X +K +L +[
; ESC +@ +A +B +C +D +E +F +G +H +I +J +K +L +M +N +O +P +Q +S +T +U +V +W +X +Y +Z +1..8
@@ -2,6 +2,15 @@
;; #LAYOUT# * * #IGNORE
; Escape mode support
m65_chrout_screen_ESC:
lda #$FF
sta M65_ESCMODE
bra m65_chrout_screen_ctrl2_end
; 'REVERSE' mode support
m65_chrout_screen_RVS_ON:
@@ -14,7 +23,6 @@ m65_chrout_screen_RVS_ON:
m65_chrout_screen_RVS_OFF:
lda #$00
sta RVS
; FALLTROUGH
@@ -0,0 +1,100 @@
;; #LAYOUT# M65 KERNAL_1 #TAKE
;; #LAYOUT# * * #IGNORE
m65_chrout_screen_escmode:
; Regardless if the escape sequence is supported, or not - cancel escape mode
lda #$00
sta M65_ESCMODE
; XXX
m65_chrout_screen_escmode_end:
jmp m65_chrout_screen_done
; XXX: implement screen routines below:
m65_chrout_esc_0:
+nop
m65_chrout_esc_1:
+nop
m65_chrout_esc_2:
+nop
m65_chrout_esc_3:
+nop
m65_chrout_esc_4:
+nop
m65_chrout_esc_5:
+nop
m65_chrout_esc_6:
+nop
m65_chrout_esc_7:
+nop
m65_chrout_esc_8:
+nop
m65_chrout_esc_9:
+nop
m65_chrout_esc_AT:
+nop
m65_chrout_esc_A:
+nop
m65_chrout_esc_B:
+nop
m65_chrout_esc_C:
+nop
m65_chrout_esc_D:
+nop
m65_chrout_esc_E:
+nop
m65_chrout_esc_F:
+nop
m65_chrout_esc_G:
+nop
m65_chrout_esc_H:
+nop
m65_chrout_esc_I:
+nop
m65_chrout_esc_J:
+nop
m65_chrout_esc_K:
+nop
m65_chrout_esc_L:
+nop
m65_chrout_esc_M:
+nop
m65_chrout_esc_N:
+nop
m65_chrout_esc_O:
+nop
m65_chrout_esc_P:
+nop
m65_chrout_esc_Q:
+nop
m65_chrout_esc_R:
+nop
m65_chrout_esc_S:
+nop
m65_chrout_esc_T:
+nop
m65_chrout_esc_U:
+nop
m65_chrout_esc_V:
+nop
m65_chrout_esc_W:
+nop
m65_chrout_esc_X:
+nop
m65_chrout_esc_Y:
+nop
m65_chrout_esc_Z:
+nop
m65_chrout_esc_LBR:
+nop
m65_chrout_esc_RBR:
+nop
jmp m65_chrout_screen_done
@@ -110,3 +110,52 @@ m65_chrout_screen_jumptable:
!word m65_chrout_screen_DEL
!word m65_chrout_screen_RETURN
!word m65_chrout_screen_RETURN
m65_chrout_screen_jumptable_escape:
!word m65_chrout_esc_0
!word m65_chrout_esc_1
!word m65_chrout_esc_2
!word m65_chrout_esc_3
!word m65_chrout_esc_4
!word m65_chrout_esc_5
!word m65_chrout_esc_6
!word m65_chrout_esc_7
!word m65_chrout_esc_8
!word m65_chrout_esc_9
!word m65_chrout_screen_done ; ':'
!word m65_chrout_screen_done ; ';'
!word m65_chrout_screen_done ; '<'
!word m65_chrout_screen_done ; '='
!word m65_chrout_screen_done ; '>'
!word m65_chrout_screen_done ; '?'
!word m65_chrout_esc_AT
!word m65_chrout_esc_A
!word m65_chrout_esc_B
!word m65_chrout_esc_C
!word m65_chrout_esc_D
!word m65_chrout_esc_E
!word m65_chrout_esc_F
!word m65_chrout_esc_G
!word m65_chrout_esc_H
!word m65_chrout_esc_I
!word m65_chrout_esc_J
!word m65_chrout_esc_K
!word m65_chrout_esc_L
!word m65_chrout_esc_M
!word m65_chrout_esc_N
!word m65_chrout_esc_O
!word m65_chrout_esc_P
!word m65_chrout_esc_Q
!word m65_chrout_esc_R
!word m65_chrout_esc_S
!word m65_chrout_esc_T
!word m65_chrout_esc_U
!word m65_chrout_esc_V
!word m65_chrout_esc_W
!word m65_chrout_esc_X
!word m65_chrout_esc_Y
!word m65_chrout_esc_Z
!word m65_chrout_esc_LBR
!word m65_chrout_screen_done ; pound symbol
!word m65_chrout_esc_RBR
+6 -6
View File
@@ -219,8 +219,8 @@ Mon_Error
; put a question mark at the end of the text
JSR PRIMM
!pet KEY_ESC, "o",KEY_CRSR_RIGHT,'?',0
LDX #$f8 ; reset stack pointer
!pet KEY_ESC, 'o', KEY_CRSR_RIGHT, '?', 0
LDX #$f8 ; reset stack pointer XXX probably would be better to restore original
TXS
BRA Main
@@ -574,7 +574,7 @@ Mon_Set_Memory
@next BCC @loop
@exit JSR PRIMM
!pet KEY_ESC, "o"
!pet KEY_ESC, 'o'
!pet $91,$00
JSR Dump_Row
JMP Main
@@ -1250,7 +1250,7 @@ Mon_Assemble
STA [Long_PC],Z
@print JSR PRIMM
!pet 13,$91,"a ", KEY_ESC, "q",0
!pet 13,$91,"a ", KEY_ESC, 'q', 0
JSR Print_Code
INC Op_Size
LDA Op_Size
@@ -1892,7 +1892,7 @@ CR_Erase
; ******
JSR PRIMM
!pet KEY_RETURN, KEY_ESC, "q",0
!pet KEY_RETURN, KEY_ESC, 'q', 0
RTS
; *******
@@ -2766,7 +2766,7 @@ BP_ZERO !pet "b-p 9 0",0 ; set buffer pointer to 0
Reg_Text
; ******
JSR PRIMM
!pet KEY_RETURN, " pc sr ac xr yr zr bp sp nvebdizc", KEY_RETURN, "; ",0
!pet KEY_RETURN, " pc sr ac xr yr zr bp sp nvebdizc", KEY_RETURN, "; ", KEY_ESC, 'q', 0
RTS
; ******
+16 -6
View File
@@ -10,12 +10,12 @@
!addr REG_A_SH = $0A ; shadow registers
!addr REG_F_SH = $0B
!addr REG_B_SH = $0C
!addr REG_C_SH = $0D
!addr REG_D_SH = $0E
!addr REG_E_SH = $0F
!addr REG_H_SH = $10
!addr REG_L_SH = $11
!addr REG_C_SH = $0C
!addr REG_B_SH = $0D
!addr REG_E_SH = $0E
!addr REG_D_SH = $0F
!addr REG_L_SH = $10
!addr REG_H_SH = $11
!addr REG_IX = $12 ; 16-bit index register
!addr REG_IY = $14 ; 16-bit index register
@@ -38,3 +38,13 @@
!addr VEC_store_via_IY_d = $72
!addr VEC_fetch_via_nn = $74
!addr VEC_store_via_nn = $76
; Masks for Z80 flag (F) register
!set Z80FLG_S = %10000000 ; sign
!set Z80FLG_Z = %01000000 ; zero
!set Z80FLG_H = %00010000 ; half carry
!set Z80FLG_P = %00000100 ; parity
!set Z80FLG_O = %00000100 ; overflow
!set Z80FLG_A = %00000010 ; add/subtract
!set Z80FLG_C = %00000001 ; carry