mirror of
https://github.com/A2osX/A2osX.git
synced 2024-09-10 22:54:59 +00:00
220 lines
5.1 KiB
Plaintext
220 lines
5.1 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------------
|
||
.PH $A800
|
||
*--------------------------------
|
||
VIDEX.SCREEN.WIDTH .EQ $A5
|
||
*--------------------------------
|
||
VIDEX.SLOT .EQ 3 ASSUME SLOT 3
|
||
*--------------------------------
|
||
VIDEX.CARD .EQ VIDEX.SLOT*256+$C000
|
||
VIDEX.COUT1 .EQ VIDEX.SLOT*256+$C007
|
||
VIDEX.REG .EQ VIDEX.SLOT*16+$C080
|
||
VIDEX.DATA .EQ VIDEX.SLOT*16+$C081
|
||
*--------------------------------
|
||
VIDEX.BASEL .EQ $0478+VIDEX.SLOT
|
||
VIDEX.BASEH .EQ $04F8+VIDEX.SLOT
|
||
VIDEX.HORIZ .EQ $0578+VIDEX.SLOT
|
||
VIDEX.CHAR .EQ $0678+VIDEX.SLOT
|
||
*--------------------------------
|
||
* I/O VECTORS -- 3 BYTES EACH
|
||
*--------------------------------
|
||
JMP VIDEX.INIT
|
||
JMP VIDEX.WARM
|
||
JMP VIDEX.READ.KEY.WITH.CASE
|
||
JMP VIDEX.GET.HORIZ.POSN
|
||
LDA #$8C ^L--HOME
|
||
.HS 2C
|
||
LDA #$9D ^]--CLREOL
|
||
.HS 2C
|
||
LDA #$8B ^K--CLREOP
|
||
.HS 2C
|
||
LDA #$9F ^_--UP
|
||
.HS 2C
|
||
LDA #$8A ^J--DOWN
|
||
.HS 2C
|
||
LDA #$88 ^H--LEFT
|
||
.HS 2C
|
||
LDA #$9C ^\--RIGHT
|
||
NOP
|
||
JMP MON.COUT
|
||
JMP VIDEX.PICK.SCREEN
|
||
JMP VIDEX.HTABX
|
||
JMP VIDEX.HTAB
|
||
JMP VIDEX.VTAB
|
||
*---Case Toggle MUST go here-----
|
||
LDA CASEFLG
|
||
EOR #$80
|
||
STA CASEFLG
|
||
RTS
|
||
*--------------------------------
|
||
* VARIABLE LENGTH ROUTINES
|
||
*--------------------------------
|
||
VIDEX.HTABX
|
||
PHA
|
||
TXA
|
||
JSR VIDEX.HTAB
|
||
PLA
|
||
RTS
|
||
*--------------------------------
|
||
VIDEX.GET.HORIZ.POSN
|
||
LDA VIDEX.HORIZ
|
||
RTS
|
||
*--------------------------------
|
||
VIDEX.VTAB
|
||
STA CV
|
||
LDA VIDEX.HORIZ
|
||
VIDEX.HTAB
|
||
PHA SAVE HORIZ POSN
|
||
LDA #$9E
|
||
JSR VIDEX.COUT1
|
||
PLA GET HORIZ POSN
|
||
CLC
|
||
ADC #$A0
|
||
JSR VIDEX.COUT1
|
||
LDA CV
|
||
ORA #$A0
|
||
JMP VIDEX.COUT1
|
||
*--------------------------------
|
||
VIDEX.INIT
|
||
LDA #80
|
||
STA VIDEX.SCREEN.WIDTH
|
||
STA CASEFLG CLEAR CASEFLG (BIT7=0)
|
||
LDA #$8C CLEAR SCREEN AND START VIDEX-80
|
||
JSR VIDEX.CARD
|
||
VIDEX.INSTALL.VECTORS
|
||
LDX #1
|
||
.1 LDA VIDEX.VECTORS,X
|
||
STA $36,X
|
||
STA VIDEX.SLOT*2+$BE10,X
|
||
LDA VIDEX.VECTORS+2,X
|
||
BIT F.EXEC
|
||
BMI .2
|
||
STA $38,X
|
||
.2 STA VIDEX.SLOT*2+$BE20,X
|
||
DEX
|
||
BPL .1
|
||
RTS
|
||
*--------------------------------
|
||
VIDEX.VECTORS
|
||
.DA VIDEX.COUT
|
||
.DA VIDEX.RDKEY
|
||
*--------------------------------
|
||
VIDEX.WARM
|
||
CLD
|
||
LDX CV
|
||
JSR MON.INIT
|
||
STX CV
|
||
JMP VIDEX.INSTALL.VECTORS
|
||
*--------------------------------
|
||
* READ KEY WITH CASE CONTROL
|
||
*--------------------------------
|
||
VIDEX.READ.KEY.WITH.CASE
|
||
JSR MON.RDKEY
|
||
ORA #$80 REQUIRED FOR EXEC COMMAND
|
||
CLC SIGNAL NO OPEN APPLE
|
||
RTS
|
||
*--------------------------------
|
||
VIDEX.RDKEY
|
||
CLD
|
||
LDA #$0A SELECT BLINKING DOUBLE UNDERLINE CURSOR
|
||
STA VIDEX.REG
|
||
LDA #$67
|
||
STA VIDEX.DATA
|
||
LDA #$0B
|
||
STA VIDEX.REG
|
||
LDA #$08
|
||
STA VIDEX.DATA
|
||
.1 LDA $C000
|
||
BPL .1
|
||
STA $C010
|
||
PHA
|
||
LDA #$0A HIDE THE CURSOR
|
||
STA VIDEX.REG
|
||
LDA #$09
|
||
STA VIDEX.DATA
|
||
PLA
|
||
CMP #$8D
|
||
BNE .2
|
||
JSR IO.CLREOL
|
||
LDA #$8D
|
||
.2 BIT CASEFLG TEST CASE CONVERSION FLAG
|
||
BPL .6 DO NOT CONVERT
|
||
CMP #$B0
|
||
BCC .6 DO NOT CONVERT
|
||
BIT $C063 TEST PADDLE BUTTON
|
||
BMI .5 NO SHIFTKEY PRESSED
|
||
CMP #$B0
|
||
BEQ .4
|
||
CMP #$C0
|
||
BNE .3
|
||
LDA #$D0
|
||
.3 CMP #$DB
|
||
BCC .6
|
||
AND #$CF
|
||
BNE .6
|
||
.4 LDA #$DD
|
||
.5 ORA #$20
|
||
.6 AND #$7F
|
||
STA VIDEX.CHAR
|
||
ORA #$80
|
||
SEC
|
||
RTS
|
||
*--------------------------------
|
||
VIDEX.COUT
|
||
CLD
|
||
CMP #$80 NORMAL OR INVERSE?
|
||
BCS .1 ...NORMAL
|
||
PHA ...80-COLUMN
|
||
LDA #$8F SELECT INVERSE DISPLAY
|
||
JSR VIDEX.COUT1
|
||
PLA
|
||
ORA #$80 MAKE PRINTABLE CHARACTER
|
||
CMP #$A0
|
||
BCS .2
|
||
ORA #$40
|
||
.2 JSR VIDEX.COUT1
|
||
LDA #$8E SELECT NORMAL DISPLAY
|
||
.1 JMP VIDEX.COUT1
|
||
*--------------------------------
|
||
* GET CHARACTER OFF CURRENT SCREEN LINE, COLUMN (Y)
|
||
*--------------------------------
|
||
VIDEX.PICK.SCREEN
|
||
STX SAVEX
|
||
BIT $CFFF TURN ON $C800 VIDEO SPACE
|
||
BIT VIDEX.CARD
|
||
*---CALCULATE POSITION-----------
|
||
CLC
|
||
TYA COLUMN 0-79
|
||
ADC VIDEX.BASEL
|
||
PHA
|
||
LDA #0
|
||
ADC VIDEX.BASEH
|
||
PHA
|
||
ASL
|
||
AND #$0C USE BIT 0 AND 1 FOR PAGING
|
||
TAX
|
||
LDA VIDEX.REG,X
|
||
PLA
|
||
LSR ODD/EVEN PAGE
|
||
PLA
|
||
TAX
|
||
*---GET CHAR FROM WINDOW---------
|
||
LDA $CC00,X
|
||
BCC .1
|
||
LDA $CD00,X
|
||
.1 ORA #$80
|
||
STA VIDEX.CHAR
|
||
LDX SAVEX
|
||
RTS
|
||
*--------------------------------
|
||
SAVEX .BS 1
|
||
CASEFLG .BS 1
|
||
*--------------------------------------
|
||
.EP
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/scmasm.30/io.s.videx
|
||
LOAD usr/src/scmasm.30/scmasm.s
|
||
ASM
|