mirror of
https://github.com/A2osX/A2osX.git
synced 2024-09-10 07:54:37 +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
|