mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-28 10:52:33 +00:00
271 lines
7.0 KiB
Plaintext
271 lines
7.0 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------------
|
||
.PH $A800
|
||
*--------------------------------
|
||
* VIDEX ULTRATERM DRIVER -- ASSUME SLOT 3
|
||
ULTRA.SLOT .EQ 3
|
||
SKMOD .EQ 1 SHIFT KEY MOD (=0 FOR //E VERSION)
|
||
*--------------------------------
|
||
* TO MAKE THE EDIT COMMAND USE MORE THAN 24 LINES,
|
||
* CHANGE $17 TO $1F OR $2F AT $803A
|
||
*--------------------------------
|
||
ULTRA.SCREEN.WIDTH .EQ $A5
|
||
*--------------------------------
|
||
ULTRA.CARD .EQ ULTRA.SLOT*256+$C000
|
||
ULTRA.COUT1 .EQ ULTRA.SLOT*256+$C007
|
||
*--------------------------------
|
||
ULTRA.REG .EQ ULTRA.SLOT*16+$C080
|
||
ULTRA.DATA .EQ ULTRA.SLOT*16+$C081
|
||
*--------------------------------
|
||
ULTRA.HORIZ .EQ $0578+ULTRA.SLOT
|
||
ULTRA.START .EQ $06F8+ULTRA.SLOT TOP-OF-SCREEN ADDRESS / 16
|
||
ULTRA.CHPG .EQ $0678
|
||
ULTRA.TEMPX .EQ $0778
|
||
ULTRA.TEMPY .EQ $07F8
|
||
ULTRA.FLAGS .EQ $07F8+ULTRA.SLOT
|
||
*--------------------------------
|
||
* I/O VECTORS -- 3 BYTES EACH
|
||
*--------------------------------
|
||
JMP ULTRA.INIT
|
||
JMP ULTRA.WARM
|
||
JMP ULTRA.READ.KEY.WITH.CASE
|
||
JMP ULTRA.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 ULTRA.PICK.SCREEN
|
||
JMP ULTRA.HTABX
|
||
JMP ULTRA.HTAB
|
||
JMP ULTRA.VTAB
|
||
*---Case Toggle MUST go here-----
|
||
LDA ULTRA.FLAGS
|
||
EOR #$40
|
||
STA ULTRA.FLAGS
|
||
RTS
|
||
*--------------------------------
|
||
* VARIABLE LENGTH ROUTINES
|
||
*--------------------------------
|
||
ULTRA.HTABX
|
||
PHA
|
||
TXA
|
||
JSR ULTRA.HTAB
|
||
PLA
|
||
RTS
|
||
*--------------------------------
|
||
ULTRA.GET.HORIZ.POSN
|
||
LDA ULTRA.HORIZ
|
||
RTS
|
||
*--------------------------------
|
||
ULTRA.VTAB
|
||
STA CV
|
||
LDA ULTRA.HORIZ
|
||
ULTRA.HTAB
|
||
PHA SAVE HORIZ POSN
|
||
LDA #$9E
|
||
JSR ULTRA.COUT1
|
||
PLA GET HORIZ POSN
|
||
JSR .1
|
||
LDA CV
|
||
|
||
.1 CLC ADD $A0 OFFSET
|
||
ADC #$A0
|
||
JMP ULTRA.COUT1
|
||
*--------------------------------
|
||
ULTRA.INIT
|
||
LDA #80
|
||
STA ULTRA.SCREEN.WIDTH
|
||
LDA #$8C CLEAR SCREEN AND START VIDEX-80
|
||
STA $C00B SWITCH OFF //E C3 ROM
|
||
STA $C006 SWITCH OFF //E C100-C7FF ROM
|
||
JSR ULTRA.CARD
|
||
ULTRA.INSTALL.VECTORS
|
||
LDX #1
|
||
.1 LDA ULTRA.VECTORS,X
|
||
STA $36,X
|
||
STA ULTRA.SLOT*2+$BE10,X
|
||
LDA ULTRA.VECTORS+2,X
|
||
BIT F.EXEC
|
||
BMI .2
|
||
STA $38,X
|
||
.2 STA ULTRA.SLOT*2+$BE20,X
|
||
DEX
|
||
BPL .1
|
||
RTS
|
||
*--------------------------------
|
||
ULTRA.VECTORS
|
||
.DA ULTRA.COUT
|
||
.DA ULTRA.RDKEY
|
||
*--------------------------------
|
||
ULTRA.WARM
|
||
CLD
|
||
LDX CV
|
||
JSR MON.INIT
|
||
STX CV
|
||
JMP ULTRA.INSTALL.VECTORS
|
||
*--------------------------------
|
||
* READ KEY WITH CASE CONTROL
|
||
*--------------------------------
|
||
ULTRA.READ.KEY.WITH.CASE
|
||
JSR MON.RDKEY
|
||
ORA #$80 REQUIRED FOR EXEC COMMAND
|
||
CLC SIGNAL NO OPEN APPLE
|
||
RTS
|
||
*--------------------------------
|
||
ULTRA.RDKEY
|
||
CLD
|
||
LDA #$0A SELECT BLINKING DOUBLE UNDERLINE CURSOR
|
||
STA ULTRA.REG
|
||
LDA #$67
|
||
STA ULTRA.DATA
|
||
LDA #$0B
|
||
STA ULTRA.REG
|
||
LDA #$08
|
||
STA ULTRA.DATA
|
||
.1 LDA $C000
|
||
BPL .1
|
||
STA $C010
|
||
PHA
|
||
LDA #$06 HIDE THE CURSOR
|
||
STA ULTRA.DATA
|
||
PLA
|
||
CMP #$8D
|
||
BNE .2
|
||
JSR IO.CLREOL
|
||
LDA #$8D
|
||
.DO SKMOD
|
||
.2 PHA CHECK SHIFT LOCK FLAG
|
||
LDA ULTRA.FLAGS
|
||
ASL
|
||
ASL
|
||
PLA
|
||
BCC .5 ...SHIFT LOCK IS ON
|
||
CMP #$C0
|
||
BCC .5 NOT IN ALPHA RANGE
|
||
BEQ .3 ...@ IS CAPITAL P
|
||
ORA #$20 ADJUST TO LOWER CASE
|
||
BIT $C063 TEST SHIFT KEY (PB3)
|
||
BMI .5 ...NOT PRESSED, LOWER CASE
|
||
CMP #$FB
|
||
BCC .4 ...NORMAL A-Z
|
||
.3 EOR #$10 CHANGE @ to P, [\]^_ to KLMNO
|
||
.4 AND #$DF UPPER CASE
|
||
.5 RTS
|
||
.ELSE
|
||
.2 RTS
|
||
.FIN
|
||
*--------------------------------
|
||
ULTRA.COUT
|
||
CLD
|
||
PHA
|
||
STA MON.INVFLG BIT 7 CONTROLS INV/NORM
|
||
CMP #$20 CATCH INV CTRL CHARS
|
||
BCS .1 ...NOT ONE
|
||
ORA #$40 MAKE CTRL VISIBLE
|
||
.1 JSR ULTRA.COUT1
|
||
LDA #$FF
|
||
STA MON.INVFLG
|
||
PLA
|
||
RTS
|
||
*--------------------------------
|
||
W16TBL .DA #80/16
|
||
.DA #96/16
|
||
.DA #160/16
|
||
.DA #80/16
|
||
.DA #80/16
|
||
.DA #80/16
|
||
.DA #160/16
|
||
.DA #128/16
|
||
*--------------------------------
|
||
* GET CHARACTER OFF CURRENT SCREEN LINE, COLUMN (Y)
|
||
*--------------------------------
|
||
ULTRA.PICK.SCREEN
|
||
STY ULTRA.TEMPY
|
||
STX ULTRA.TEMPX
|
||
BIT $CFFF
|
||
BIT ULTRA.CARD TURN ON SCREEN
|
||
*--------------------------------
|
||
LDA ULTRA.FLAGS GET MODE (0...7)
|
||
AND #$07
|
||
TAY Y = MODE INDEX (0...7)
|
||
*--------------------------------
|
||
LDA ULTRA.TEMPY HORIZ. POSN
|
||
CPY #$06 132 COL MODE?
|
||
BNE .1 ...NOT 132 COLUMNS
|
||
ADC #14 ADJUST FOR 132 COLUMN MODE
|
||
.1 STA ULTRA.CHPG
|
||
*--------------------------------
|
||
LDX W16TBL,Y GET WIDTH/16
|
||
LDA ULTRA.START CV*(WIDTH/16) + START
|
||
.2 CLC INCLUDE 'CLC' IN LOOP ON PURPOSE
|
||
ADC CV TO FORCE WRAP-AROUND
|
||
DEX
|
||
BNE .2
|
||
*--------------------------------
|
||
PHA
|
||
LSR *16
|
||
LSR
|
||
LSR
|
||
LSR
|
||
TAX SAVE PAGE VALUE IN X-REG
|
||
PLA
|
||
ASL
|
||
ASL
|
||
ASL
|
||
ASL
|
||
*--------------------------------
|
||
CLC + CH (or CH+15 if 132 columns)
|
||
ADC ULTRA.CHPG
|
||
STA ULTRA.CHPG
|
||
BCC .3
|
||
INX ADD CARRY TO PAGE VALUE
|
||
*--------------------------------
|
||
.3 TXA GET PAGE VALUE
|
||
AND #$0F
|
||
ORA MODETBL,Y
|
||
STA ULTRA.REG+2
|
||
*--------------------------------
|
||
ASL
|
||
AND #$0C
|
||
TAY
|
||
LDA ULTRA.REG,Y
|
||
TXA GET PAGE VALUE AGAIN
|
||
LSR SET CARRY IF IN 2ND PAGE
|
||
*--------------------------------
|
||
LDY ULTRA.CHPG
|
||
LDA $CC00,Y
|
||
BCC .4
|
||
LDA $CD00,Y
|
||
.4 ORA #$80 MAKE HIGH ASCII
|
||
LDY ULTRA.TEMPY RESTORE REGS
|
||
LDX ULTRA.TEMPX
|
||
RTS ALL DONE
|
||
*--------------------------------
|
||
MODETBL .HS 40 80X24 (VIDEOTERM EMULATION)
|
||
.HS 50 96X24
|
||
.HS 70 160X24
|
||
.HS 50 80X24 INTERLACE
|
||
.HS 50 80X32 INTERLACE
|
||
.HS 50 80X48 INTERLACE
|
||
.HS 70 132X24 INTERLACE
|
||
.HS 70 128X32 INTERLACE
|
||
*--------------------------------------
|
||
.EP
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/scmasm.30/io.s.ultra
|
||
LOAD usr/src/scmasm.30/scmasm.s
|
||
ASM
|