Merged JGH 'More preparation for VDU update' PR
This commit is contained in:
parent
7ce731f614
commit
acba233489
BIN
applecorn.po
BIN
applecorn.po
Binary file not shown.
107
auxmem.bytwrd.s
107
auxmem.bytwrd.s
|
@ -4,6 +4,8 @@
|
|||
* Applecorn OSBYTE and OSWORD handlers
|
||||
*
|
||||
* 15-Aug-2021 Added 'set variable' OSBYTEs 1-6
|
||||
* 02-Sep-2021 OSWORD 5 can read from Main Memory ROM
|
||||
* 04-Sep-2021 Extended VDU table to add $75 and $A0 for VDU driver
|
||||
|
||||
|
||||
XC ; 65c02
|
||||
|
@ -14,17 +16,30 @@
|
|||
|
||||
BYTEVARBASE EQU $190 ; Base of OSBYTE variables
|
||||
|
||||
BYTWRDADDR DW BYTE00 ; OSBYTE 0 - Machine host
|
||||
BYTWRDADDR DW BYTE00XX ; OSBYTE 0 - Machine host
|
||||
DW BYTE01 ; OSBYTE 1 - User flag
|
||||
DW BYTE02 ; OSBYTE 2 - OSRDCH source
|
||||
DW BYTE03 ; OSBYTE 3 - OSWRCH dest
|
||||
DW BYTE04 ; OSBYTE 4 - Cursor keys
|
||||
DW BYTE05 ; OSBYTE 5 - Printer destination
|
||||
DW BYTE06 ; OSBYTE 6 - Printer ignore
|
||||
DW BYTENULL ; OSBYTE 7 - Serial Rx Speed
|
||||
DW BYTENULL ; OSBYTE 8 - Serial Tx Speed
|
||||
DW BYTENULL ; OSBYTE 9 - Flash period space
|
||||
DW BYTENULL ; OSBYTE 10 - Flash period mark
|
||||
DW BYTENULL ; OSBYTE 11 - Autorepeat delay
|
||||
DW BYTENULL ; OSBYTE 12 - Autorepeat repeat
|
||||
BYTWRDLOW
|
||||
BYTESZLO EQU BYTWRDLOW-BYTWRDADDR
|
||||
BYTELOW EQU BYTESZLO/2-1 ; Maximum low OSBYTE
|
||||
BYTEHIGH EQU $7C ; First high OSBYTE
|
||||
BYTEHIGH EQU $75 ; First high OSBYTE
|
||||
DW BYTE75 ; OSBYTE 117 - Read VDU status
|
||||
DW BYTE76 ; OSBYTE 118 - Update keyboard LEDs
|
||||
DW BYTENULL ; OSBYTE 119
|
||||
DW BYTENULL ; OSBYTE 120
|
||||
DW BYTENULL ; OSBYTE 121
|
||||
DW BYTENULL ; OSBYTE 122
|
||||
DW BYTENULL ; OSBYTE 123
|
||||
DW BYTE7C ; OSBYTE 124 - Clear Escape
|
||||
DW BYTE7D ; OSBYTE 125 - Set Escape
|
||||
DW BYTE7E ; OSBYTE 126 - Ack. Escape
|
||||
|
@ -38,13 +53,30 @@ BYTEHIGH EQU $7C ; First high OSBYTE
|
|||
DW BYTE86 ; OSBYTE 134 - POS, VPOS - VDU.s
|
||||
DW BYTE87 ; OSBYTE 135 - Character, MODE - VDU.s
|
||||
DW BYTE88 ; OSBYTE 136 - *CODE
|
||||
DW BYTE89 ; OSBYTE 137 - *MOTOR
|
||||
DW BYTE8A ; OSBYTE 138 - Buffer insert
|
||||
DW BYTENULL ; OSBYTE 137 - *MOTOR
|
||||
DW BYTENULL ; OSBYTE 138 - Buffer insert
|
||||
DW BYTE8B ; OSBYTE 139 - *OPT
|
||||
DW BYTE8C ; OSBYTE 140 - *TAPE
|
||||
DW BYTE8D ; OSBYTE 141 - *ROM
|
||||
DW BYTENULL ; OSBYTE 140 - *TAPE
|
||||
DW BYTENULL ; OSBYTE 141 - *ROM
|
||||
DW BYTE8E ; OSBYTE 142 - Enter language - INIT.s
|
||||
DW BYTE8F ; OSBYTE 143 - Service call - INIT.s
|
||||
DW BYTENULL ; OSBYTE 144
|
||||
DW BYTENULL ; OSBYTE 145
|
||||
DW BYTENULL ; OSBYTE 146
|
||||
DW BYTENULL ; OSBYTE 147
|
||||
DW BYTENULL ; OSBYTE 148
|
||||
DW BYTENULL ; OSBYTE 149
|
||||
DW BYTENULL ; OSBYTE 150
|
||||
DW BYTENULL ; OSBYTE 151
|
||||
DW BYTENULL ; OSBYTE 152
|
||||
DW BYTENULL ; OSBYTE 153
|
||||
DW BYTENULL ; OSBYTE 154
|
||||
DW BYTENULL ; OSBYTE 155
|
||||
DW BYTENULL ; OSBYTE 156
|
||||
DW BYTENULL ; OSBYTE 157
|
||||
DW BYTENULL ; OSBYTE 158
|
||||
DW BYTENULL ; OSBYTE 159
|
||||
DW BYTEA0 ; OSBYTE 160 - Read VDU variable
|
||||
BYTWRDTOP
|
||||
DW BYTEVAR ; OSBYTE 166+ - Read/Write OSBYTE variable
|
||||
* Maximum high OSBYTE
|
||||
|
@ -172,28 +204,29 @@ BYTWRDEXIT ROR A ; Move Carry to A
|
|||
ROL A ; Move Carry back to flags
|
||||
PLA ; Restore A
|
||||
CLV ; Clear V = Actioned
|
||||
RTS
|
||||
BYTENULL RTS
|
||||
|
||||
BYTWRDFAIL
|
||||
* TEST code for VIEW
|
||||
CPX #$07
|
||||
BNE BYTFAIL0
|
||||
CMP #$76
|
||||
BEQ BYTE76
|
||||
CMP #$A0
|
||||
BNE BYTFAIL0
|
||||
LDY #79 ; Read VDU variable $09,$0A
|
||||
LDX #23
|
||||
BRA BYTWRDEXIT
|
||||
BYTE76
|
||||
LDX $00
|
||||
BRA BYTWRDEXIT
|
||||
** TEST code for VIEW
|
||||
* CPX #$07
|
||||
* BNE BYTFAIL0
|
||||
* CMP #$76
|
||||
* BEQ BYTE76
|
||||
* CMP #$A0
|
||||
* BNE BYTFAIL0
|
||||
* LDY #79 ; Read VDU variable $09,$0A
|
||||
* LDX #23
|
||||
* BRA BYTWRDEXIT
|
||||
*BYTE76
|
||||
* LDX $00
|
||||
* BRA BYTWRDEXIT
|
||||
* TEST
|
||||
BYTFAIL0
|
||||
* JSR SERVICE ; Offer to sideways ROMs
|
||||
* LDX OSXREG ; Get returned X
|
||||
* CMP #$00
|
||||
* BEQ BYTWRDEXIT ; Claimed, return
|
||||
BYTFAIL0 PHX ; *DEBUG*
|
||||
JSR SERVICEX ; Offer to sideways ROMs as service X
|
||||
LDX OSXREG ; Get returned X, returned Y is in Y
|
||||
CMP #$01
|
||||
PLA ; *DEBUG*
|
||||
BCC BYTWRDEXIT ; Claimed, return
|
||||
JSR UNSUPBYTWRD ; *DEBUG*
|
||||
LDX #$FF ; X=&FF if unclaimed
|
||||
PLP ; Restore original flags and IRQs
|
||||
|
@ -315,6 +348,19 @@ WORD02 RTS ; Dummy, do nothing
|
|||
*
|
||||
WORD05 JSR GETADDR ; Point to address, set Y=>data
|
||||
BNE WORD05A
|
||||
JSR WORD05IO
|
||||
LDY #$04
|
||||
STA (OSCTRL),Y ; Store it
|
||||
WORD05RET RTS
|
||||
|
||||
WORD05IO LDA OSINTWS+0 ; X CORRUPTED BY XF2MAIN
|
||||
LDY OSINTWS+1
|
||||
WORD05IO1 >>> XF2MAIN,MAINRDMEM
|
||||
|
||||
* <8000xxxx language memory
|
||||
* ????xxxx main memory RAM paged in via STA $C002
|
||||
* ????xxxx main memory ROM paged in via XFER
|
||||
|
||||
STA $C002 ; Switch to main memory
|
||||
WORD05A LDA (OSINTWS) ; Get byte
|
||||
STA $C003 ; Back to aux memory
|
||||
|
@ -345,9 +391,9 @@ GETADDR STA OSINTWS+0 ; (OSINTWS)=>byte to read/write
|
|||
* OSBYTE routines
|
||||
*****************
|
||||
|
||||
* TO DO: move to init.s
|
||||
BYTE00 LDX #$0A ; $00 = identify Host
|
||||
RTS ; %000x1xxx host type, 'A'pple
|
||||
** TO DO: move to init.s
|
||||
*BYTE00 LDX #$0A ; $00 = identify Host
|
||||
* RTS ; %000x1xxx host type, 'A'pple
|
||||
|
||||
BYTE88 LDA #$01 ; $88 = *CODE
|
||||
WORDE0 JMP (USERV) ; OSWORD &E0+
|
||||
|
@ -441,7 +487,8 @@ BYTE8E PHP ; Save CLC=RESET, SEC=Not RESET
|
|||
* OSBYTE $8F - Issue service call
|
||||
* X=service call, Y=parameter
|
||||
*
|
||||
BYTE8F TXA
|
||||
BYTE8F
|
||||
SERVICEX TXA
|
||||
SERVICE LDX #$0F
|
||||
BIT $8006
|
||||
BPL :SERVSKIP ; No service entry
|
||||
|
@ -453,7 +500,7 @@ SERVICE LDX #$0F
|
|||
|
||||
|
||||
* Test/Debug code
|
||||
UNSUPBYTWRD
|
||||
UNSUPBYTWRD TAX
|
||||
LDA #<OSBYTEM
|
||||
LDY #>OSBYTEM
|
||||
CPX #7
|
||||
|
|
|
@ -20,6 +20,8 @@
|
|||
* test ESCHAR.
|
||||
* FIXED: INKEY doesn't restore cursor on timeout.
|
||||
* The three separate cursors can be set seperately.
|
||||
* 02-Sep-2021 INKEY-256 tests Apple IIe vs IIc.
|
||||
* 05-Sep-2021 KBDINIT returns startup value to pass to VDUINT.
|
||||
|
||||
|
||||
* TEMP, move to VDU.S
|
||||
|
@ -82,8 +84,14 @@ KBDINIT LDX #DEFBYTEEND-DEFBYTE-1
|
|||
STA BYTEVARBASE+DEFBYTELOW,X
|
||||
DEX
|
||||
BPL :KBDINITLP
|
||||
LDA #$C0
|
||||
STA FX254VAR ; Also returns default MODE=0
|
||||
LDX #$C0
|
||||
STX FX254VAR ; b7-b4=default KBD map, b3-b0=default MODE
|
||||
BIT SETV
|
||||
JSR KBDTEST
|
||||
BCS :KBDINITOK ; Return default MODE=0
|
||||
STA $C010 ; Ack. keypress
|
||||
TAX ; Use keypress as default MODE
|
||||
:KBDINITOK TXA
|
||||
RTS
|
||||
|
||||
* OSRDCH/INKEY handler
|
||||
|
@ -101,7 +109,6 @@ RDCHHND LDA #$80 ; flag=wait forever
|
|||
INKEY PHY ; Dummy PHY to balance RDCH
|
||||
INKEYGO PHX ; Save registers
|
||||
PHY
|
||||
*
|
||||
BIT VDUSTATUS ; Enable editing cursor
|
||||
BVC INKEYGO2 ; No editing cursor
|
||||
JSR GETCHRC ; Get character under cursor
|
||||
|
@ -111,7 +118,6 @@ INKEYGO PHX ; Save registers
|
|||
JSR COPYSWAP1 ; Swap to copy cursor
|
||||
INKEYGO2 JSR GETCHRC ; Get character under cursor
|
||||
STA OLDCHAR
|
||||
*
|
||||
CLI
|
||||
BRA INKEY1 ; Turn cursor on
|
||||
*
|
||||
|
@ -158,11 +164,9 @@ INKEYDEC DEX
|
|||
BNE INKEYLP1 ; Not 0, loop back
|
||||
TYA
|
||||
BNE INKEYLP1 ; Not 0, loop back
|
||||
*
|
||||
PHY
|
||||
JSR INKEYOFF ; Restore cursors
|
||||
PLY
|
||||
*
|
||||
DEY ; Y=$FF
|
||||
TYA ; A=$FF
|
||||
PLX ; Drop dummy PHY
|
||||
|
@ -171,17 +175,7 @@ INKEYDEC DEX
|
|||
* Timeout: CS, AY=$FFFF, becomes XY=$FFFF
|
||||
|
||||
INKEYOK PHA
|
||||
*
|
||||
JSR INKEYOFF ; Restore cursors
|
||||
*
|
||||
* LDA OLDCHAR ; Remove editing cursor
|
||||
* JSR PUTCHRC ; Remove cursor
|
||||
* BIT VDUSTATUS
|
||||
* BVC INKEYOK2 ; No editing cursor
|
||||
* JSR COPYSWAP1 ; Swap cursor back
|
||||
* LDA COPYCHAR
|
||||
* JSR PUTCHRC ; Remove edit cursor
|
||||
*
|
||||
INKEYOK2 PLA
|
||||
PLY ; <$80=INKEY or $80=RDCH
|
||||
PLX ; Restore X
|
||||
|
@ -219,12 +213,27 @@ BYTE81DONE RTS
|
|||
* Y=$1B, X=???, CS - escape
|
||||
* Y=$00, X=char, CC - keypress
|
||||
|
||||
|
||||
NEGINKEY CPX #$01
|
||||
LDX #$00 ; Unimplemented
|
||||
LDY #$00
|
||||
BCS NEGINKEY0
|
||||
LDX #$2A
|
||||
; 6502 A 65C02 A 65816 B A
|
||||
LDA #$00 ; 00 00 zz 00
|
||||
DB #$EB ; SBC NOP 00 XBA 00 zz
|
||||
DB #$3A ; #$3A C5 DEC A FF DEC A 00 yy
|
||||
DB #$EB ; SBC NOP FF XBA yy 00
|
||||
DB #$EA ; #$EA DA NOP FF NOP yy 00
|
||||
BEQ NEGINKEY0 ; INKEY-256 = $2A - AppleIIgs
|
||||
LDA #$C0
|
||||
LDY #$FB
|
||||
JSR WORD05IO1 ; Read from $FBC0 in main ROM
|
||||
LDX #$2C
|
||||
TAY
|
||||
BEQ NEGINKEY0 ; INKEY-256 = $2C = Apple IIc
|
||||
LDX #$2E ; INKEY-256 = $2E = Apple IIe
|
||||
NEGINKEY0 CLC
|
||||
NEGINKEY0 LDY #$00
|
||||
CLC
|
||||
RTS
|
||||
|
||||
|
||||
|
@ -409,5 +418,3 @@ KBDDONE RTS
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -147,6 +147,6 @@ BYTE00XX BEQ BYTE00A ; OSBYTE 0,0 - generate error
|
|||
RTS ; %000x1xxx host type, 'A'pple
|
||||
BYTE00A BRK
|
||||
DB $F7
|
||||
HELLO ASC 'Applecorn MOS 2021-09-04 snapshot'
|
||||
HELLO ASC 'Applecorn MOS 2021-09-05 snapshot'
|
||||
DB $00 ; Unify MOS messages
|
||||
|
||||
|
|
209
auxmem.vdu.s
209
auxmem.vdu.s
|
@ -9,12 +9,15 @@
|
|||
* 16-Aug-2021 Added COPY cursor handling.
|
||||
* 21-Aug-2021 CHR$(&80+n) is inverse of CHR$(&00+n)
|
||||
* 21-Aug-2021 If screen scrolls, copy cursor adjusted.
|
||||
* 05-Sep-2021 Starting to prepare VDU workspace.
|
||||
|
||||
|
||||
**********************************
|
||||
* VDU DRIVER WORKSPACE LOCATIONS *
|
||||
**********************************
|
||||
* $00D0-$00DF VDU driver zero page workspace
|
||||
* $03ED-$03EE XFER transfer address
|
||||
|
||||
|
||||
VDUSTATUS EQU $D0 ; $D0 VDU status
|
||||
VDUZP1 EQU VDUSTATUS+1 ; $D1
|
||||
|
@ -29,8 +32,8 @@ VDUQ EQU $D7 ; TEMP HACK
|
|||
* VDUVARS
|
||||
* VDUTEXTX EQU $2A0+0 ; text X coord
|
||||
* VDUTEXTY EQU $2A0+1 ; text Y coord
|
||||
VDUTEXTX EQU COL
|
||||
VDUTEXTY EQU ROW
|
||||
VDUTEXTX EQU $96 ;COL TEMP
|
||||
VDUTEXTY EQU $97 ;ROW TEMP
|
||||
VDUCOPYX EQU $2A0+2 ; copy cursor X coord
|
||||
VDUCOPYY EQU $2A0+3 ; copy cursor Y coord
|
||||
* VDUCOPYCHR EQU $2A0+0 ; char underneath cursor when copying
|
||||
|
@ -40,10 +43,33 @@ VDUMODE EQU $2A0+5 ; current MODE
|
|||
* VDUCHAR EQU $2A0+6 ; VDU command, 1 byte
|
||||
* VDUQ EQU $2A0+7 ; VDU sequence, 9 bytes
|
||||
|
||||
* KBD or VDU?
|
||||
* FLASHER ; flash counter for cursor
|
||||
* OLDCHAR ; character under cursor
|
||||
* CURSOR ; character used for cursor
|
||||
* TEMP, move to VDU.S
|
||||
* FLASHER EQU $290 ; flash counter for cursor
|
||||
* CURSOR EQU $291 ; character under cursor
|
||||
* CURSORED EQU $292 ; character used for cursor
|
||||
* CURSORCP EQU $293 ; character used for edit cursor
|
||||
* OLDCHAR EQU $294 ; character used for copy cursor
|
||||
* COPYCHAR EQU $295 ;
|
||||
|
||||
|
||||
|
||||
|
||||
* Start restructuring VDU variables
|
||||
***********************************
|
||||
VDUVARS EQU $290
|
||||
* VDUTWINL VDUVARS+$08 ; text window left
|
||||
* VDUTWINB VDUVARS+$09 ; text window bottom \ window
|
||||
* VDUTWINR VDUVARS+$0A ; text window right / size
|
||||
* VDUTWINT VDUVARS+$0B ; text window top
|
||||
*
|
||||
* VDUTEXTX EQU VDUVARS+$18 ; absolute POS
|
||||
* VDUTEXTY EQU VDUVARS+$19 ; absolute VPOS
|
||||
* VDUCOPYX EQU VDUVARS+$1A ;
|
||||
* VDUCOPYY EQU VDUVARS+$1B ;
|
||||
* VDUMODE
|
||||
* CURSOR
|
||||
* CURSORED
|
||||
* CURSORCP
|
||||
|
||||
|
||||
* Move editing cursor
|
||||
|
@ -98,17 +124,18 @@ COPYSWAP4 RTS
|
|||
|
||||
|
||||
* Clear to EOL
|
||||
CLREOL LDA ROW
|
||||
CLREOL LDA VDUTEXTY ; ROW
|
||||
ASL
|
||||
TAX
|
||||
LDA SCNTAB,X ; LSB of row
|
||||
STA ZP1
|
||||
LDA SCNTAB+1,X ; MSB of row
|
||||
STA ZP1+1
|
||||
LDA COL
|
||||
LDA VDUTEXTX ; COL
|
||||
PHA
|
||||
STZ COL
|
||||
:L1 LDA COL
|
||||
STZ VDUTEXTX ; COL
|
||||
:L1
|
||||
LDA VDUTEXTX ; COL
|
||||
LSR
|
||||
TAY
|
||||
BCC :S1
|
||||
|
@ -116,13 +143,13 @@ CLREOL LDA ROW
|
|||
:S1 LDA #" "
|
||||
STA (ZP1),Y
|
||||
>>> WRTAUX
|
||||
LDA COL
|
||||
LDA VDUTEXTX ; COL
|
||||
CMP #79
|
||||
BEQ :S2
|
||||
INC COL
|
||||
INC VDUTEXTX ; COL
|
||||
BRA :L1
|
||||
:S2 PLA
|
||||
STA COL
|
||||
STA VDUTEXTX ; COL
|
||||
RTS
|
||||
|
||||
* Clear the screen
|
||||
|
@ -132,16 +159,16 @@ VDUINIT STA $C00F
|
|||
STA CURSORCP ; Copy cursor when editing
|
||||
LDA #$A0
|
||||
STA CURSORED ; Edit cursor when editing
|
||||
CLEAR STZ ROW
|
||||
STZ COL
|
||||
CLEAR STZ VDUTEXTY ; ROW
|
||||
STZ VDUTEXTX ; COL
|
||||
:L1 JSR CLREOL
|
||||
:S2 LDA ROW
|
||||
:S2 LDA VDUTEXTY ; ROW
|
||||
CMP #23
|
||||
BEQ :S3
|
||||
INC ROW
|
||||
INC VDUTEXTY ; ROW
|
||||
BRA :L1
|
||||
:S3 STZ ROW
|
||||
STZ COL
|
||||
:S3 STZ VDUTEXTY ; ROW
|
||||
STZ VDUTEXTX ; COL
|
||||
RTS
|
||||
|
||||
* Calculate character address
|
||||
|
@ -206,46 +233,6 @@ PRCHR6 STA (VDUADDR),Y ; Store it
|
|||
PLP ; Restore IRQs
|
||||
RTS
|
||||
|
||||
* PHA
|
||||
* LDA $C000 ; Kbd data/strobe
|
||||
* BMI :KEYHIT
|
||||
* :RESUME LDA ROW
|
||||
* ASL
|
||||
* TAX
|
||||
* LDA SCNTAB,X ; LSB of row address
|
||||
* STA ZP1
|
||||
* LDA SCNTAB+1,X ; MSB of row address
|
||||
* STA ZP1+1
|
||||
* LDA COL
|
||||
* BIT $C01F
|
||||
* BPL :S1A ; 40-col
|
||||
* LSR
|
||||
* BCC :S1
|
||||
*:S1A >>> WRTMAIN
|
||||
*:S1 TAY
|
||||
* PLA
|
||||
* EOR #$80
|
||||
* STA (ZP1),Y ; Screen address
|
||||
* >>> WRTAUX
|
||||
* RTS
|
||||
*:KEYHIT STA $C010 ; Clear strobe
|
||||
* AND #$7F
|
||||
* CMP #$13 ; Ctrl-S
|
||||
* BEQ :PAUSE
|
||||
* CMP #$1B ; Esc
|
||||
* BNE :RESUME
|
||||
*:ESC SEC
|
||||
* ROR ESCFLAG ; Set ESCFLAG
|
||||
* BRA :RESUME
|
||||
*:PAUSE STA $C010 ; Clear strobe
|
||||
*:L1 LDA $C000 ; Kbd data/strobe
|
||||
* BPL :L1
|
||||
* AND #$7F
|
||||
* CMP #$11 ; Ctrl-Q
|
||||
* BEQ :RESUME
|
||||
* CMP #$1B ; Esc
|
||||
* BEQ :ESC
|
||||
* BRA :PAUSE
|
||||
|
||||
* Return char at ROW,COL in A and X, MODE in Y
|
||||
BYTE87
|
||||
|
@ -272,76 +259,34 @@ GETCHR7 TYA
|
|||
INY ; Y=MODE
|
||||
GETCHROK RTS
|
||||
|
||||
*GETCHRC LDA ROW
|
||||
* ASL
|
||||
* TAX
|
||||
* LDA SCNTAB,X
|
||||
* STA ZP1
|
||||
* LDA SCNTAB+1,X
|
||||
* STA ZP1+1
|
||||
* LDA COL
|
||||
* BIT $C01F
|
||||
* BPL :S1A ; 40-col
|
||||
* LSR
|
||||
* BCC :S1
|
||||
*:S1A STA $C002 ; Read main memory
|
||||
*:S1 TAY
|
||||
* LDA (ZP1),Y
|
||||
* EOR #$80
|
||||
* STA $C003 ; Read aux mem again
|
||||
* TAX
|
||||
* LDY #$00
|
||||
* BIT $C01F
|
||||
* BMI :GETCHOK
|
||||
* INY
|
||||
*:GETCHOK RTS
|
||||
|
||||
BYTE86 LDY ROW ; $86 = read cursor pos
|
||||
LDX COL
|
||||
BYTE86 LDY VDUTEXTY ; ROW ; $86 = read cursor pos
|
||||
LDX VDUTEXTX ; COL
|
||||
RTS
|
||||
|
||||
* Perform backspace & delete operation
|
||||
DELETE JSR BACKSPC
|
||||
* LDA COL
|
||||
* BEQ :S1
|
||||
* DEC COL
|
||||
* BRA :S2
|
||||
*:S1 LDA ROW
|
||||
* BEQ :S3
|
||||
* DEC ROW
|
||||
* LDA #79
|
||||
* STA COL
|
||||
:S2 LDA #' '
|
||||
JMP PUTCHRC
|
||||
*:S3 RTS
|
||||
|
||||
* Perform backspace/cursor left operation
|
||||
BACKSPC LDA COL
|
||||
BACKSPC
|
||||
LDA VDUTEXTX ; COL
|
||||
BEQ :S1
|
||||
DEC COL
|
||||
DEC VDUTEXTX ; COL
|
||||
BRA :S3
|
||||
:S1 LDA ROW
|
||||
:S1 LDA VDUTEXTY ; ROW
|
||||
BEQ :S3
|
||||
DEC ROW
|
||||
DEC VDUTEXTY ; ROW
|
||||
LDA #39
|
||||
BIT $C01F
|
||||
BPL :S2
|
||||
LDA #79
|
||||
:S2 STA COL
|
||||
:S2
|
||||
STA VDUTEXTX ; COL
|
||||
:S3 RTS
|
||||
|
||||
** Perform cursor right operation
|
||||
*CURSRT LDA COL
|
||||
* CMP #78
|
||||
* BCS :S1
|
||||
* INC COL
|
||||
* RTS
|
||||
*:S1 LDA ROW
|
||||
* CMP #22
|
||||
* BCS :S2
|
||||
* INC ROW
|
||||
* STZ COL
|
||||
*:S2 RTS
|
||||
|
||||
* Output character to VDU driver
|
||||
* All registers trashable
|
||||
|
@ -389,18 +334,18 @@ OUTCHARGO CMP #$00 ; NULL
|
|||
BRA :IDONE
|
||||
:T4 CMP #$0A ; Linefeed
|
||||
BNE :T5
|
||||
LDA ROW
|
||||
LDA VDUTEXTY ; ROW
|
||||
CMP #23
|
||||
BEQ :TOSCROLL ; JGH
|
||||
INC ROW
|
||||
INC VDUTEXTY ; ROW
|
||||
:IDONE RTS
|
||||
* BRA :DONE
|
||||
:TOSCROLL JMP SCROLL ; JGH
|
||||
:T5 CMP #$0B ; Cursor up
|
||||
BNE :T6
|
||||
LDA ROW
|
||||
LDA VDUTEXTY ; ROW
|
||||
BEQ :IDONE
|
||||
DEC ROW
|
||||
DEC VDUTEXTY ; ROW
|
||||
* BRA :IDONE
|
||||
RTS
|
||||
:T6 CMP #$0D ; Carriage return
|
||||
|
@ -408,7 +353,7 @@ OUTCHARGO CMP #$00 ; NULL
|
|||
LDA #$BF
|
||||
AND VDUSTATUS
|
||||
STA VDUSTATUS ; Turn copy cursor off
|
||||
STZ COL
|
||||
STZ VDUTEXTX ; COL
|
||||
* BRA :IDONE
|
||||
RTS
|
||||
:T7 CMP #$0C ; Ctrl-L
|
||||
|
@ -426,8 +371,8 @@ OUTCHARGO CMP #$00 ; NULL
|
|||
RTS
|
||||
:T8 CMP #$1E ; Home
|
||||
BNE :T9
|
||||
STZ ROW
|
||||
STZ COL
|
||||
STZ VDUTEXTY ; ROW
|
||||
STZ VDUTEXTX ; COL
|
||||
* BRA :IDONE
|
||||
RTS
|
||||
:T9
|
||||
|
@ -443,8 +388,9 @@ OUTCHARGO CMP #$00 ; NULL
|
|||
BMI :T9A
|
||||
CPX #80
|
||||
BCS :IDONE
|
||||
:T9A STX COL
|
||||
STY ROW
|
||||
:T9A
|
||||
STX VDUTEXTX ; COL
|
||||
STY VDUTEXTY ; ROW
|
||||
RTS
|
||||
:T9B CMP #$7F ; Delete
|
||||
BNE :T10
|
||||
|
@ -464,24 +410,27 @@ OUTCHARGO CMP #$00 ; NULL
|
|||
:T10A JSR PRCHRC ; Store char, checking keypress
|
||||
|
||||
* Perform cursor right operation
|
||||
VDU09 LDA COL
|
||||
VDU09
|
||||
LDA VDUTEXTX ; COL
|
||||
CMP #39
|
||||
BCC :S2
|
||||
BIT $C01F
|
||||
BPL :T11
|
||||
CMP #79
|
||||
BCC :S2
|
||||
:T11 STZ COL
|
||||
LDA ROW
|
||||
:T11
|
||||
STZ VDUTEXTX ; COL
|
||||
LDA VDUTEXTY ; ROW
|
||||
CMP #23
|
||||
BEQ SCROLL
|
||||
INC ROW
|
||||
INC VDUTEXTY ; ROW
|
||||
:DONE RTS
|
||||
* BRA :DONE
|
||||
:S2 INC COL
|
||||
:S2
|
||||
INC VDUTEXTX ; COL
|
||||
BRA :DONE
|
||||
SCROLL JSR SCROLLER
|
||||
* STZ COL
|
||||
* STZ VDUTEXTX ; COL
|
||||
JSR CLREOL
|
||||
*:DONE
|
||||
RTS
|
||||
|
@ -535,6 +484,14 @@ SCNTAB DW $800,$880,$900,$980,$A00,$A80,$B00,$B80
|
|||
DW $850,$8D0,$950,$9D0,$A50,$AD0,$B50,$BD0
|
||||
|
||||
|
||||
|
||||
* TEST code for VIEW
|
||||
BYTE75 LDX VDUSTATUS
|
||||
RTS
|
||||
BYTE76 LDX #$00
|
||||
RTS
|
||||
BYTEA0 LDY #79 ; Read VDU variable $09,$0A
|
||||
LDX #23
|
||||
RTS
|
||||
* TEST
|
||||
|
||||
|
||||
|
|
11
mainmem.s
11
mainmem.s
|
@ -1273,6 +1273,15 @@ COPYPFXMF
|
|||
JSR STRCPY
|
||||
RTS
|
||||
|
||||
* Read mainmem from auxmem
|
||||
MAINRDMEM STA A1L
|
||||
STY A1H
|
||||
LDA $C081
|
||||
LDA $C081
|
||||
LDA (A1L)
|
||||
MAINRDEXIT >>> XF2AUX,NULLRTS ; Back to an RTS
|
||||
|
||||
|
||||
******************************************************
|
||||
* ProDOS Parameter lists for MLI calls
|
||||
******************************************************
|
||||
|
@ -1372,3 +1381,5 @@ QUITPL HEX 04 ; Number of parameters
|
|||
MFTEMP DS 65 ; Temp copy of MOSFILE
|
||||
PREFIX DS 65 ; Buffer for ProDOS prefix
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue