mirror of
https://github.com/bobbimanners/Applecorn.git
synced 2025-02-13 16:30:37 +00:00
Rolled back latest VDU/CHARIO changes. Broken!
This commit is contained in:
parent
eb960cfcdf
commit
1e2f4285e1
BIN
applecorn.po
BIN
applecorn.po
Binary file not shown.
@ -1,5 +1,5 @@
|
|||||||
*********************************************************
|
*********************************************************
|
||||||
* Kernel / Character I/O
|
* Kernel / Misc
|
||||||
*********************************************************
|
*********************************************************
|
||||||
|
|
||||||
* KERNEL/CHARIO.S
|
* KERNEL/CHARIO.S
|
||||||
@ -10,21 +10,13 @@
|
|||||||
* with VBLK. Ensured cursor turned on straight away.
|
* with VBLK. Ensured cursor turned on straight away.
|
||||||
* 15-Aug-2021 Cursor keys move copy cursor, copy reads char.
|
* 15-Aug-2021 Cursor keys move copy cursor, copy reads char.
|
||||||
* Copy cursor not visible yet.
|
* Copy cursor not visible yet.
|
||||||
* 16-Aug-2021 Copy cursor and Edit cursor visible.
|
|
||||||
|
|
||||||
|
|
||||||
* TEMP:
|
* TEMP:
|
||||||
FLASHER EQU $290
|
FXESCCHAR EQU $240
|
||||||
CURSOR EQU $291
|
FXESCON EQU $241
|
||||||
OLDCHAR EQU $292
|
FLASHER EQU $242
|
||||||
COPYCHAR EQU $293
|
OLDCHAR EQU $243
|
||||||
|
CURSOR EQU $244
|
||||||
FXTABCHAR EQU BYTEVARBASE+219
|
|
||||||
FXESCCHAR EQU BYTEVARBASE+220
|
|
||||||
FXESCON EQU BYTEVARBASE+229
|
|
||||||
FX2VAR EQU BYTEVARBASE+$B1
|
|
||||||
FX3VAR EQU BYTEVARBASE+$EC
|
|
||||||
FX4VAR EQU BYTEVARBASE+$ED
|
|
||||||
|
|
||||||
|
|
||||||
* OSWRCH handler
|
* OSWRCH handler
|
||||||
@ -58,8 +50,6 @@ RDCHHND LDA #$80 ; flag=wait forever
|
|||||||
BNE INKEYGO
|
BNE INKEYGO
|
||||||
LDA #'_'
|
LDA #'_'
|
||||||
STA CURSOR
|
STA CURSOR
|
||||||
LDA #$1B
|
|
||||||
STA FXESCCHAR
|
|
||||||
* TEST
|
* TEST
|
||||||
BRA INKEYGO ; Wait forever for input
|
BRA INKEYGO ; Wait forever for input
|
||||||
|
|
||||||
@ -69,29 +59,18 @@ INKEYGO PHX ; Save registers
|
|||||||
PHY
|
PHY
|
||||||
JSR GETCHRC ; Get character under cursor
|
JSR GETCHRC ; Get character under cursor
|
||||||
STA OLDCHAR
|
STA OLDCHAR
|
||||||
* This can be optimised
|
CLI
|
||||||
BIT VDUSTATUS
|
|
||||||
BVC INKEYGO2 ; No editing cursor
|
|
||||||
STA COPYCHAR ; Save char under edit cursor
|
|
||||||
LDA #$A0
|
|
||||||
JSR PUTCHRC ; Display edit cursor
|
|
||||||
JSR COPYSWAP1 ; Swap to copy cursor
|
|
||||||
JSR GETCHRC ; Get character under copy cursor
|
|
||||||
STA OLDCHAR
|
|
||||||
*
|
|
||||||
INKEYGO2 CLI
|
|
||||||
BRA INKEY1 ; Turn cursor on
|
BRA INKEY1 ; Turn cursor on
|
||||||
;
|
;
|
||||||
INKEYLP1 PHX
|
INKEYLP1 PHX
|
||||||
INKEYLP2 PHY
|
INKEYLP2 PHY
|
||||||
INKEYLP CLC
|
* TO DO: display copy cursor as well
|
||||||
LDA #$01 ; Slow flash, every 32 frames
|
INKEYLP INC FLASHER ; Increment cursor counter
|
||||||
BIT VDUSTATUS
|
INC FLASHER
|
||||||
BVC INKEY0
|
* INC FLASHER ; Fast flash
|
||||||
ASL A ; Fast flash, every 16 frames
|
* INC FLASHER
|
||||||
INKEY0 ADC FLASHER
|
LDA FLASHER
|
||||||
STA FLASHER
|
AND #127 ; Flash every 64/100sec = 32/50sec
|
||||||
AND #15
|
|
||||||
BNE INKEY3 ; Not time to toggle yet
|
BNE INKEY3 ; Not time to toggle yet
|
||||||
LDA OLDCHAR ; Prepare to remove cursor
|
LDA OLDCHAR ; Prepare to remove cursor
|
||||||
BIT FLASHER
|
BIT FLASHER
|
||||||
@ -102,6 +81,7 @@ INKEY3 LDA ESCFLAG
|
|||||||
BMI INKEYOK ; Escape pending, return it
|
BMI INKEYOK ; Escape pending, return it
|
||||||
INKEY4 JSR KEYREAD ; Test for input, all can be trashed
|
INKEY4 JSR KEYREAD ; Test for input, all can be trashed
|
||||||
BCC INKEYOK ; Char returned, return it
|
BCC INKEYOK ; Char returned, return it
|
||||||
|
* JSR DELAY ; Wait 1/100sec
|
||||||
;
|
;
|
||||||
* VBLK pulses at 50Hz, changes at 100Hz
|
* VBLK pulses at 50Hz, changes at 100Hz
|
||||||
* (60Hz in US, will need tweeking)
|
* (60Hz in US, will need tweeking)
|
||||||
@ -129,17 +109,8 @@ INKEYDEC DEX
|
|||||||
; Timeout: CS, AY=$FFFF, becomes XY=$FFFF
|
; Timeout: CS, AY=$FFFF, becomes XY=$FFFF
|
||||||
|
|
||||||
INKEYOK PHA
|
INKEYOK PHA
|
||||||
* This can be optimised
|
|
||||||
BIT VDUSTATUS
|
|
||||||
BVC INKEYOK2 ; No editing cursor
|
|
||||||
LDA OLDCHAR
|
LDA OLDCHAR
|
||||||
JSR PUTCHRC ; Remove copy cursor
|
JSR PUTCHRC ; Remove cursor
|
||||||
JSR COPYSWAP1 ; Swap cursor back
|
|
||||||
LDA COPYCHAR
|
|
||||||
BRA INKEYOK3 ; Restore char under edit cursor
|
|
||||||
*
|
|
||||||
INKEYOK2 LDA OLDCHAR ; and swap cursor back
|
|
||||||
INKEYOK3 JSR PUTCHRC ; Remove edit cursor
|
|
||||||
PLA
|
PLA
|
||||||
PLY ; <$80=INKEY or $80=RDCH
|
PLY ; <$80=INKEY or $80=RDCH
|
||||||
PLX ; Restore X
|
PLX ; Restore X
|
||||||
@ -196,32 +167,23 @@ KEYREAD
|
|||||||
*
|
*
|
||||||
* Process cursor keys
|
* Process cursor keys
|
||||||
* TO DO: check FX4VAR
|
* TO DO: check FX4VAR
|
||||||
KEYCURSOR CMP #$C9
|
CMP #$C9
|
||||||
BEQ KEYCOPY
|
BEQ KEYCOPY
|
||||||
CMP #$CC
|
CMP #$CC
|
||||||
BCC KEYREADOK ; Not cursor key
|
BCC KEYREADOK ; Not cursor key
|
||||||
PHA
|
JSR MOVECOPY ; Move copy cursor
|
||||||
LDA OLDCHAR
|
KEYCOPYBAD SEC
|
||||||
JSR PUTCHRC ; Remove cursor
|
|
||||||
PLA
|
|
||||||
JSR COPYMOVE ; Move copy cursor
|
|
||||||
JSR GETCHRC ; Save char under cursor
|
|
||||||
STA OLDCHAR
|
|
||||||
SEC
|
|
||||||
KEYREADOK RTS
|
KEYREADOK RTS
|
||||||
|
|
||||||
KEYCOPY LDA FXTABCHAR ; Prepare TAB if no copy cursor
|
KEYCOPY AND #$0F ; TAB=$09 if no copy cursor
|
||||||
BIT VDUSTATUS
|
BIT VDUSTATUS
|
||||||
BVC KEYREADOK ; No copy cursor, return TAB
|
BVC KEYCOPYOK ; No copy cursor
|
||||||
LDA OLDCHAR ; Get the char under cursor
|
JSR COPYSWAP ; Swap to copy cursor
|
||||||
|
JSR GETCHRC ; Get the character
|
||||||
PHA
|
PHA
|
||||||
JSR OUTCHARGO ; Output it to restore and move cursor
|
JSR MOVECOPY3 ; Move copy cursor, swap back
|
||||||
JSR GETCHRC ; Save char under cursor
|
|
||||||
STA OLDCHAR
|
|
||||||
PLA
|
PLA
|
||||||
BNE KEYCOPYOK ; Ok character
|
BEQ KEYCOPYBAD ; Bad character read
|
||||||
SEC
|
|
||||||
JMP BEEP ; Beep and return CS=No char
|
|
||||||
KEYCOPYOK CLC
|
KEYCOPYOK CLC
|
||||||
RTS ; Return the character
|
RTS ; Return the character
|
||||||
|
|
||||||
@ -252,14 +214,14 @@ KBDTEST LDA $C000 ; VS here to test for keypress
|
|||||||
CMP #$09
|
CMP #$09
|
||||||
BEQ KBDTAB ;
|
BEQ KBDTAB ;
|
||||||
CMP #$08
|
CMP #$08
|
||||||
BCC KBDESC ; <$08 not cursor key
|
BCC KBDDONE ; <$08 not cursor key
|
||||||
CMP #$0C
|
CMP #$0C
|
||||||
BCC KBDCURSR
|
BCC KBDCURSR
|
||||||
CMP #$15
|
CMP #$15
|
||||||
BEQ KBDCUR15
|
BEQ KBDCUR15
|
||||||
* Test for Escape key
|
* Test for Escape key
|
||||||
KBDESC CMP FXESCCHAR ; Current ESCAPE char?
|
KBDESC CMP #27 ; TEMP
|
||||||
* CMP #27 ; TEMP
|
* CMP FXESCCHAR ; Current ESCAPE char?
|
||||||
BNE KBDNOESC ; No
|
BNE KBDNOESC ; No
|
||||||
LDX FXESCON ; Is ESCAPE enabled?
|
LDX FXESCON ; Is ESCAPE enabled?
|
||||||
BNE KBDNOESC ; No
|
BNE KBDNOESC ; No
|
||||||
|
100
auxmem.vdu.s
100
auxmem.vdu.s
@ -6,7 +6,6 @@
|
|||||||
* 15-Aug-2021 Optimised address calculations and PRCHRC.
|
* 15-Aug-2021 Optimised address calculations and PRCHRC.
|
||||||
* Entry point to move copy cursor.
|
* Entry point to move copy cursor.
|
||||||
* Start to consolidate VDU workspace.
|
* Start to consolidate VDU workspace.
|
||||||
* 16-Aug-2021 Added COPY cursor handling.
|
|
||||||
|
|
||||||
|
|
||||||
**********************************
|
**********************************
|
||||||
@ -31,8 +30,6 @@ VDUTEXTX EQU COL
|
|||||||
VDUTEXTY EQU ROW
|
VDUTEXTY EQU ROW
|
||||||
VDUCOPYX EQU $250+2 ; copy cursor X coord
|
VDUCOPYX EQU $250+2 ; copy cursor X coord
|
||||||
VDUCOPYY EQU $250+3 ; copy cursor Y coord
|
VDUCOPYY EQU $250+3 ; copy cursor Y coord
|
||||||
VDUCOPYCHR EQU $260+0 ; char underneath cursor when copying
|
|
||||||
|
|
||||||
* VDUCURSOR EQU $250+4 ; cursor character
|
* VDUCURSOR EQU $250+4 ; cursor character
|
||||||
* VDUMODE EQU $250+5 ; current MODE
|
* VDUMODE EQU $250+5 ; current MODE
|
||||||
* VDUCHAR EQU $250+6 ; VDU command, 1 byte
|
* VDUCHAR EQU $250+6 ; VDU command, 1 byte
|
||||||
@ -45,55 +42,34 @@ VDUCOPYCHR EQU $260+0 ; char underneath cursor when copying
|
|||||||
|
|
||||||
|
|
||||||
* Move editing cursor
|
* Move editing cursor
|
||||||
* A=cursor key, CS from caller
|
* A=cursor key
|
||||||
COPYMOVE PHA
|
MOVECOPY PHA
|
||||||
BIT VDUSTATUS
|
BIT VDUSTATUS
|
||||||
BVS COPYMOVE2 ; Edit cursor already on
|
BVS MOVECOPY2 ; Edit cursor already on
|
||||||
JSR GETCHRC
|
LDX #1
|
||||||
STA COPYCHAR
|
MOVECOPY1 LDA VDUTEXTX,X ; Initialise copy cursor
|
||||||
LDA #$A0
|
STA VDUCOPYX,X
|
||||||
JSR PUTCHRC ; Edit cursor
|
DEX
|
||||||
SEC
|
BPL MOVECOPY1
|
||||||
JSR COPYSWAP2 ; Initialise copy cursor
|
LDA #$40
|
||||||
ROR FLASHER
|
|
||||||
ASL FLASHER ; Ensure b0=0
|
|
||||||
LDA #$42
|
|
||||||
ORA VDUSTATUS
|
ORA VDUSTATUS
|
||||||
STA VDUSTATUS ; Turn cursor editing on
|
STA VDUSTATUS ; Turn edit cursor on
|
||||||
COPYMOVE2 PLA
|
MOVECOPY2 JSR COPYSWAP ; Use edit cursor
|
||||||
AND #3 ; Convert to 8/9/10/11
|
PLA
|
||||||
|
AND #3
|
||||||
ORA #8
|
ORA #8
|
||||||
COPYMOVE3 JMP OUTCHARGO ; Move edit cursor
|
MOVECOPY3 JSR OUTCHARGO ; Move edit cursor
|
||||||
|
* JSR CHARADDR ; Get character address
|
||||||
;* Turn editing cursor on/off
|
* ; Swap cursors back
|
||||||
;COPYCURSOR BIT VDUSTATUS
|
COPYSWAP LDX #1
|
||||||
; BVC COPYSWAP4 ; Copy cursor not active
|
|
||||||
; PHP ; Save CS=Turn On, CC=Turn Off
|
|
||||||
; JSR COPYSWAP1 ; Swap to edit cursor
|
|
||||||
; LDA COPYCHAR ; Prepare to turn edit cursor off
|
|
||||||
; PLP
|
|
||||||
; BCC COPYCURS2 ; Restore character
|
|
||||||
;COPYCURS1 JSR GETCHRC ; Get character under edit cursor
|
|
||||||
; STA COPYCHAR
|
|
||||||
; LDA #$A0 ; Output edit cursor
|
|
||||||
;COPYCURS2 JSR PUTCHRC
|
|
||||||
;* ; Drop through to swap back
|
|
||||||
|
|
||||||
* Swap between edit and copy cursors
|
|
||||||
;COPYSWAP BIT VDUSTATUS
|
|
||||||
; BVC COPYSWAP4 ; Edit cursor off
|
|
||||||
COPYSWAP1 CLC ; CC=Swap TEXT and COPY
|
|
||||||
COPYSWAP2 LDX #1
|
|
||||||
COPYSWAPLP LDY VDUCOPYX,X
|
COPYSWAPLP LDY VDUCOPYX,X
|
||||||
LDA VDUTEXTX,X
|
LDA VDUTEXTX,X
|
||||||
STA VDUCOPYX,X
|
STA VDUCOPYX,X
|
||||||
BCS COPYSWAP3 ; CS=Copy TEXT to COPY
|
|
||||||
TYA
|
TYA
|
||||||
STA VDUTEXTX,X
|
STA VDUTEXTX,X
|
||||||
COPYSWAP3 DEX
|
DEX
|
||||||
BPL COPYSWAPLP
|
BPL COPYSWAPLP
|
||||||
COPYSWAP4 RTS
|
RTS
|
||||||
|
|
||||||
|
|
||||||
* Clear to EOL
|
* Clear to EOL
|
||||||
CLREOL LDA ROW
|
CLREOL LDA ROW
|
||||||
@ -124,7 +100,6 @@ CLREOL LDA ROW
|
|||||||
RTS
|
RTS
|
||||||
|
|
||||||
* Clear the screen
|
* Clear the screen
|
||||||
VDUINIT
|
|
||||||
CLEAR STZ ROW
|
CLEAR STZ ROW
|
||||||
STZ COL
|
STZ COL
|
||||||
:L1 JSR CLREOL
|
:L1 JSR CLREOL
|
||||||
@ -371,26 +346,23 @@ OUTCHARGO CMP #$00 ; NULL
|
|||||||
BNE :T5
|
BNE :T5
|
||||||
LDA ROW
|
LDA ROW
|
||||||
CMP #23
|
CMP #23
|
||||||
BEQ :TOSCROLL
|
BEQ SCROLL
|
||||||
INC ROW
|
INC ROW
|
||||||
:IDONE RTS
|
:IDONE RTS
|
||||||
; BRA :DONE
|
; BRA :DONE
|
||||||
:TOSCROLL JMP SCROLL
|
|
||||||
:T5 CMP #$0B ; Cursor up
|
:T5 CMP #$0B ; Cursor up
|
||||||
BNE :T6
|
BNE :T6
|
||||||
LDA ROW
|
LDA ROW
|
||||||
BEQ :IDONE
|
BEQ :IDONE
|
||||||
DEC ROW
|
DEC ROW
|
||||||
; BRA :IDONE
|
BRA :IDONE
|
||||||
RTS
|
|
||||||
:T6 CMP #$0D ; Carriage return
|
:T6 CMP #$0D ; Carriage return
|
||||||
BNE :T7
|
BNE :T7
|
||||||
LDA #$BF
|
LDA #$BF
|
||||||
AND VDUSTATUS
|
AND VDUSTATUS
|
||||||
STA VDUSTATUS ; Turn copy cursor off
|
STA VDUSTATUS ; Turn copy cursor off
|
||||||
STZ COL
|
STZ COL
|
||||||
; BRA :IDONE
|
BRA :IDONE
|
||||||
RTS
|
|
||||||
:T7 CMP #$0C ; Ctrl-L
|
:T7 CMP #$0C ; Ctrl-L
|
||||||
BEQ :T7A
|
BEQ :T7A
|
||||||
CMP #$16 ; MODE
|
CMP #$16 ; MODE
|
||||||
@ -401,34 +373,16 @@ OUTCHARGO CMP #$00 ; NULL
|
|||||||
TAX
|
TAX
|
||||||
STA $C00C,X
|
STA $C00C,X
|
||||||
:T7A JSR CLEAR
|
:T7A JSR CLEAR
|
||||||
; BRA :IDONE
|
BRA :IDONE
|
||||||
RTS
|
|
||||||
:T8 CMP #$1E ; Home
|
:T8 CMP #$1E ; Home
|
||||||
BNE :T9
|
BNE :T9
|
||||||
STZ ROW
|
STZ ROW
|
||||||
STZ COL
|
STZ COL
|
||||||
; BRA :IDONE
|
BRA :IDONE
|
||||||
RTS
|
:T9 CMP #$7F ; Delete
|
||||||
:T9 CMP #$1F ; TAB
|
|
||||||
BNE :T9B
|
|
||||||
LDY VDUQ+8
|
|
||||||
CPY #24
|
|
||||||
BCS :IDONE
|
|
||||||
LDX VDUQ+7
|
|
||||||
CPX #80
|
|
||||||
BCS :IDONE
|
|
||||||
BIT $C01F
|
|
||||||
BMI :T9A
|
|
||||||
CPX #80
|
|
||||||
BCS :IDONE
|
|
||||||
:T9A STX COL
|
|
||||||
STY ROW
|
|
||||||
RTS
|
|
||||||
:T9B CMP #$7F ; Delete
|
|
||||||
BNE :T10
|
BNE :T10
|
||||||
JSR DELETE
|
JSR DELETE
|
||||||
; BRA :IDONE
|
BRA :IDONE
|
||||||
RTS
|
|
||||||
:T10 CMP #$20
|
:T10 CMP #$20
|
||||||
BCC :IDONE
|
BCC :IDONE
|
||||||
JSR PRCHRC ; Store char, checking keypress
|
JSR PRCHRC ; Store char, checking keypress
|
||||||
@ -498,5 +452,3 @@ SCNTAB DW $800,$880,$900,$980,$A00,$A80,$B00,$B80
|
|||||||
DW $828,$8A8,$928,$9A8,$A28,$AA8,$B28,$BA8
|
DW $828,$8A8,$928,$9A8,$A28,$AA8,$B28,$BA8
|
||||||
DW $850,$8D0,$950,$9D0,$A50,$AD0,$B50,$BD0
|
DW $850,$8D0,$950,$9D0,$A50,$AD0,$B50,$BD0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user