From a4552b0e346e798356864e49889d406144e85b60 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt Date: Wed, 30 Aug 2017 20:04:57 +0200 Subject: [PATCH] Improved cursor handling consistency. So far most of the time the cursor drawing was handled with a 'jsr COff - jsr COn' bracket around the drawing code. However in the area of screen erasing a different approach was used - which caused subtile issues. https://github.com/oliverschmidt/ip65/commit/4d729ec8390e6c67b7c240ad45562f1f82a2b025 already fixed (most ?) of those issues for the Apple II and the ATARI. However it broke the approach 'jsr COff - jsr COn' brackets. This is now adjusted - for all machines. --- drivers/a2vt100.s | 13 +++++-------- drivers/atrvt100.s | 43 ++++++++++++++++++++++++------------------- drivers/c64vt100.s | 16 ++++++++-------- 3 files changed, 37 insertions(+), 35 deletions(-) diff --git a/drivers/a2vt100.s b/drivers/a2vt100.s index cce324e..5e70a16 100644 --- a/drivers/a2vt100.s +++ b/drivers/a2vt100.s @@ -554,9 +554,8 @@ LE6b cmp #$01 LE6d cmp #$02 bne LE6e ; par undefined ldx CV ; line in X + jsr COff jsr ErLn ; erase line - sta sCrsrChar ; del char .. - ; ..under crsr jsr COn LE6e jmp LEend @@ -635,6 +634,7 @@ LE9c dex ; previous line ; -- 2 -- del screen LE9e cmp #$02 ; unknown? bne LE9f ; then ingnore + jsr COff ldx #Rows-1 ; start at ln 23 LE9d txa pha ; save X @@ -643,6 +643,7 @@ LE9d txa tax ; restore X dex ; previous line bpl LE9d + jsr COn LE9f jmp LEend ; --- r --- set scroll region @@ -1474,7 +1475,7 @@ EL2 sta (xVector),y ; clear char ; erase screen line from crsr to end of line ; ------------------------------------- -ErEnLn +ErEnLn jsr COff ; -- erase even col chars -- bit $c055 lda CH ; get crsr col @@ -1496,8 +1497,6 @@ EEL3 sta (BASL),y ; clear char cpy #Cols/2 ; odd pos 40? bne EEL3 ; next char - sta sCrsrChar ; del char .. - ; ..under crsr jsr COn rts @@ -1509,7 +1508,7 @@ EEL3 sta (BASL),y ; clear char ; erase screen line up to crsr ; ------------------------------------- -ErBeLn +ErBeLn jsr COff ; -- erase even col chars -- bit $c055 lda CH ; get crsr col @@ -1529,8 +1528,6 @@ EBL2 sta (BASL),y ; clear char EBL3 dey bpl EBL2 ; pos>=0 -> next - sta sCrsrChar ; del char .. - ; ..under crsr jsr COn rts diff --git a/drivers/atrvt100.s b/drivers/atrvt100.s index ec6f9bd..7fa2210 100644 --- a/drivers/atrvt100.s +++ b/drivers/atrvt100.s @@ -564,9 +564,8 @@ LE6b cmp #$01 LE6d cmp #$02 bne LE6e ; par undefined ldx ROWCRS ; line in X + jsr COff jsr ErLn ; erase line - sta sCrsrChar ; del char .. - ; ..under crsr jsr COn LE6e jmp LEend @@ -645,6 +644,7 @@ LE9c dex ; previous line ; -- 2 -- del screen LE9e cmp #$02 ; unknown? bne LE9f ; then ingnore + jsr COff ldx #Rows-1 ; start at ln 23 LE9d txa pha ; save X @@ -653,6 +653,7 @@ LE9d txa tax ; restore X dex ; previous line bpl LE9d + jsr COn LE9f jmp LEend ; --- r --- set scroll region @@ -1424,8 +1425,10 @@ L2 jsr COn ; ------------------------------------- ErLn jsr SLV ; line start in xVector -ErLn_ ldy #Cols-1 - lda #$00 + + ; -- erase chars -- +ErLn_ ldy #Cols-1 ; col 39 + lda #$00 ; load space EL1 sta (xVector),y ; clear char dey bpl EL1 @@ -1440,16 +1443,17 @@ EL1 sta (xVector),y ; clear char ; erase screen line from crsr to end of line ; ------------------------------------- -ErEnLn ldx ROWCRS +ErEnLn jsr COff + ; -- erase chars -- + ldx ROWCRS jsr SLV - ldy COLCRS - lda #$00 -EEL1 sta (xVector),y + ldy COLCRS ; get crsr col + lda #$00 ; load space +EEL1 sta (xVector),y ; clear char iny - cpy #Cols - bne EEL1 - sta sCrsrChar ; del char .. - ; ..under crsr + cpy #Cols ; pos 40? + bne EEL1 ; next char + jsr COn rts @@ -1461,15 +1465,16 @@ EEL1 sta (xVector),y ; erase screen line up to crsr ; ------------------------------------- -ErBeLn ldx ROWCRS +ErBeLn jsr COff + ; -- erase chars -- + ldx ROWCRS jsr SLV - ldy COLCRS - lda #$00 -EBL1 sta (xVector),y + ldy COLCRS ; get crsr col + lda #$00 ; load space +EBL1 sta (xVector),y ; clear char dey - bpl EBL1 - sta sCrsrChar ; del char .. - ; ..under crsr + bpl EBL1 ; pos>=0 -> next + jsr COn rts diff --git a/drivers/c64vt100.s b/drivers/c64vt100.s index d0e5744..d311702 100644 --- a/drivers/c64vt100.s +++ b/drivers/c64vt100.s @@ -728,9 +728,9 @@ LE6b cmp #$01 LE6d cmp #$02 bne LE6e ; par undefined ldx sRow ; line in X + jsr COff jsr ErLn ; erase line - sta sCrsrChar ; del char .. - ; ..under crsr + jsr COn LE6e jmp LEend @@ -808,6 +808,7 @@ LE9c dex ; previous line ; -- 2 -- del screen LE9e cmp #$02 ; unknown? bne LE9f ; then ingnore + jsr COff ldx #$18 ; start at ln 24 LE9d txa pha ; save X @@ -816,6 +817,7 @@ LE9d txa tax ; restore X dex ; previous line bpl LE9d + jsr COn LE9f jmp LEend ; --- r --- set scroll region @@ -1783,7 +1785,7 @@ EL2 sta (yVector),y ; clear char ; erase screen line from crsr to end of line ; ------------------------------------- -ErEnLn +ErEnLn jsr COff ; -- erase chars -- ldy sCol ; get crsr col lda #$20 ; load space @@ -1791,8 +1793,6 @@ EEL1 sta (sLinePtr),y ; clear char iny cpy #$28 ; pos 40? bne EEL1 ; next char - sta sCrsrChar ; del char .. - ; ..under crsr ; -- set colour -- ldy sCol ; get crsr col lda #fVa ; load vanilla @@ -1801,6 +1801,7 @@ EEL2 sta (sLineColPtr),y ; set colour cpy #$28 ; pos 40? bne EEL2 ; next char + jsr COn rts ; ------------------------------------- @@ -1811,15 +1812,13 @@ EEL2 sta (sLineColPtr),y ; set colour ; erase screen line up to crsr ; ------------------------------------- -ErBeLn +ErBeLn jsr COff ; -- erase chars -- ldy sCol ; get crsr col lda #$20 ; load space EBL1 sta (sLinePtr),y ; clear char dey bpl EBL1 ; pos>=0 -> next - sta sCrsrChar ; del char .. - ; ..under crsr ; -- set colour -- ldy sCol ; get crsr col lda #fVa ; load vanilla @@ -1827,6 +1826,7 @@ EBL2 sta (sLineColPtr),y ; clear char dey bpl EBL2 ; pos>=0 -> next + jsr COn rts ; -------------------------------------