diff --git a/applecorn.po b/applecorn.po index b700207..223e066 100644 Binary files a/applecorn.po and b/applecorn.po differ diff --git a/auxmem.chario.s b/auxmem.chario.s index 64ef6af..3a5d2eb 100644 --- a/auxmem.chario.s +++ b/auxmem.chario.s @@ -157,7 +157,7 @@ INKEYGO CLI ; Enable IRQs JSR GETCHRC ; Get character under cursor STA COPYCHAR ; Save char under edit cursor LDA CURSORED - JSR PUTCURSOR ; Display edit cursor + JSR SHOWCURSOR ; Display edit cursor [ON] JSR COPYSWAP1 ; Swap to copy cursor INKEYGO2 JSR GETCHRC ; Get character under cursor STA OLDCHAR @@ -174,12 +174,14 @@ INKEY0 ADC FLASHER BNE INKEY3 ; Not time to toggle yet LDA OLDCHAR ; Prepare to remove cursor BIT FLASHER - BMI INKEY2 ; Remove cursor + BPL INKEY1 ; Do not remove cursor + JSR REMCURSOR ; Cursor off [OFF] + BRA INKEY3 INKEY1 LDA CURSOR ; Add cursor BIT VDUSTATUS BVC INKEY2 LDA CURSORCP -INKEY2 JSR PUTCURSOR ; Toggle cursor +INKEY2 JSR SHOWCURSOR ; Cursor on [ON] INKEY3 LDA #$27 ; Prepare to return CHR$27 if Escape state CLC BIT ESCFLAG ; Check Escape state @@ -213,10 +215,10 @@ INKEYOK PHA ; Save key or timeout LDA OLDCHAR ; Prepare for main cursor BIT VDUSTATUS BVC INKEYOFF2 ; No editing cursor - JSR PUTCURSOR ; Remove cursor + JSR REMCURSOR ; Remove cursor [OFF] JSR COPYSWAP1 ; Swap cursor back LDA COPYCHAR ; Remove main cursor -INKEYOFF2 JSR PUTCURSOR ; Remove cursor +INKEYOFF2 JSR REMCURSOR ; Remove cursor [OFF] PLP BCS INKEYOK3 ; Timeout LDA ESCFLAG ; Keypress, test for Escape @@ -540,7 +542,7 @@ KEYCURSOR CMP #$C9 BEQ KEYCOPY PHA LDA OLDCHAR - JSR PUTCURSOR ; Remove cursor + JSR REMCURSOR ; Remove cursor [OFF] PLA JSR COPYMOVE ; Move copy cursor JSR GETCHRC ; Save char under cursor @@ -553,7 +555,7 @@ KEYCOPYTAB LDA FXTABCHAR ; Prepare TAB if no copy cursor BVC KEYREADOK1 ; No copy cursor, return TAB LDA OLDCHAR ; Get the char under cursor PHA - JSR PUTCOPYCURS ; Output it to restore and move cursor + JSR PUTCOPYCURS ; Output it to restore and move cursor [OFF] JSR GETCHRC ; Save char under cursor STA OLDCHAR PLA diff --git a/auxmem.shr.s b/auxmem.shr.s index 2758088..bb7ac6c 100644 --- a/auxmem.shr.s +++ b/auxmem.shr.s @@ -147,10 +147,7 @@ SHRBGMASKA DW $0000 ; Keep a copy in aux mem too * Write character to SHR screen * On entry: A - character to write -SHRPRCHAR CMP CURSORED ; Edit cursor? - BNE :NOTEDIT - LDA #127 ; If so, use block char -:NOTEDIT LDX VDUPIXELS ; Pixels per byte +SHRPRCHAR LDX VDUPIXELS ; Pixels per byte CPX #$02 ; 2 is 320-mode (MODE 1) BNE :S1 JMP SHRPRCH320 @@ -158,17 +155,19 @@ SHRPRCHAR CMP CURSORED ; Edit cursor? * Plot or unplot a cursor on SHR screen -SHRCURSOR PHA ; Preserve character +* On entry: A - character to plot, CS show cursor/CC remove cursor +SHRCURSOR PHP ; Preserve flags + PHA ; Preserve character LDA VDUPIXELS ; Pixels per byte CMP #$02 ; 2 is 320-mode (MODE 1) BNE :MODE0 LDA #$04 ; 4 bytes in 320 mode - LDX #$77 ; Two white pixels + LDX #$71 ; White/red BRA :S1 :MODE0 LDA #$02 ; 2 bytes in 640 mode - LDX #$FF ; Two white pixels + LDX #%11011101 ; White/red/white/red :S1 STA :BYTES ; Bytes per char - STX :WHITE + STX :CURSBYTE LDA VDUSTATUS ; If VDU5 mode, bail AND #$20 BNE :BAIL @@ -184,23 +183,25 @@ SHRCURSOR PHA ; Preserve character STA VDUADDR+1 LDY #$00 PLA ; Recover character - CMP CURSOR - BEQ :CURSORON - CMP CURSORED - BEQ :CURSORON - CMP CURSORCP - BEQ :CURSORON - BRA :CURSOROFF + PLP ; Recover flags + BCC :CURSOROFF :CURSORON -:L1 LDA :WHITE - STAL [VDUADDR],Y + LDA [VDUADDR],Y ; See if cursor shown + CMP :CURSBYTE + BEQ :DONE + STA :SAVEBYTE ; Preserve byte under cursor + LDA :CURSBYTE +:L1 STAL [VDUADDR],Y INY CPY :BYTES BNE :L1 RTS :CURSOROFF -:L2 LDA SHRBGMASKA - STAL [VDUADDR],Y + LDA [VDUADDR],Y ; See if cursor shown + CMP :CURSBYTE + BNE :DONE + LDA :SAVEBYTE ; Restore byte under cursor +:L2 STAL [VDUADDR],Y INY CPY :BYTES BNE :L2 @@ -208,7 +209,8 @@ SHRCURSOR PHA ; Preserve character :BAIL PLA RTS :BYTES DB $00 ; 2 for 640-mode, 4 for 320-mode -:WHITE DB $00 ; White pixels for mode +:CURSBYTE DB $00 ; Cursor byte for mode +:SAVEBYTE DB $00 ; Byte under cursor * Write character to SHR screen in 320 pixel mode diff --git a/auxmem.vdu.s b/auxmem.vdu.s index c0ba0d4..3829e79 100644 --- a/auxmem.vdu.s +++ b/auxmem.vdu.s @@ -280,7 +280,7 @@ COPYMOVE PHA JSR GETCHRC STA COPYCHAR LDA CURSORED - JSR PUTCURSOR ; Edit cursor + JSR SHOWCURSOR ; Edit cursor [ON] SEC JSR COPYSWAP2 ; Initialise copy cursor ROR FLASHER @@ -390,13 +390,25 @@ PRCHR7 PLA :NOTSHR RTS -* Wrapper around PUTCHRC used when drawing cursor -PUTCURSOR TAX ; Preserve character +* Wrapper around PUTCHRC used when showing cursor +SHOWCURSOR TAX ; Preserve character BIT VDUSCREEN BVS :SHR TXA JMP PUTCHRC :SHR TXA ; Recover character + SEC ; Show cursor + JMP SHRCURSOR + + +* Wrapper around PUTCHRC used when removing cursor +REMCURSOR TAX ; Preserve character + BIT VDUSCREEN + BVS :SHR + TXA + JMP PUTCHRC +:SHR TXA ; Recover character + CLC ; Remove cursor JMP SHRCURSOR @@ -407,6 +419,7 @@ PUTCOPYCURS TAX ; Preserve character TXA JMP OUTCHARCP :SHR TXA ; Recover character + CLC ; Remove cursor JSR SHRCURSOR JMP OUTCHARCP2