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