PAGE SBTL 'TASC VGP][ SUPPORT COPYRIGHT (C) DIGISOLVE LTD 1984' ; ; PROGRAMMED BY ALAN COAKER ; TASC COMPILER SUPPORT FOR DIGISOLVE VGP][ ; ; ; EQUATES TO VGP REGISTERS ; SLOT EQU 5 ; SLOT OF VGP CARD BASE EQU SLOT*16+$C080 ; VGP REGISTER BASE ADDRESS BASE1 EQU SLOT*256+$C000 ; REGISTERS EXTERNAL TO VGP STATUS EQU BASE ; STATUS READ ONLY CMD EQU BASE ; CMD WRITE ONLY CTRL1 EQU BASE+1 ; MODE REGISTER CTRL2 EQU BASE+2 ; LINE TYPES ETC CSIZE EQU BASE+3 ; CHARACTER SIZES DELTAX EQU BASE+5 ; X PROJECTION DELTAY EQU BASE+7 ; Y PROJECTION XMSB EQU BASE+8 ; X MSB XLSB EQU BASE+9 ; X LSB POSITION YMSB EQU BASE+10 ; Y MSB YLSB EQU BASE+11 ; Y LSB POSITION ; CTRL3 EQU BASE1 ; FORMAT CONTROL CTRL4 EQU BASE1+1 ; WRITE MODE SCROLL EQU BASE1+2 ; Y OFFSET PAN EQU BASE1+3 ; X OFFSET COLRR EQU BASE1+4 ; READ SCREEN ; ; VARIABLES WITHIN COMMON ; TASCOM EQU 6420 ; START OF TASC PROGRAM AND COMMON X1H EQU TASCOM+00 ; X1 CO ORD X1L EQU TASCOM+01 Y1H EQU TASCOM+02 ; Y1 CO ORD Y1L EQU TASCOM+03 X2H EQU TASCOM+04 ; X2 CO ORD X2L EQU TASCOM+05 Y2H EQU TASCOM+06 ; Y2 CO ORD Y2L EQU TASCOM+07 ; ; NOW THE SUPPORT CODE ; ORG 6070 ; JUST AFTER THE TASC LIBRARY PLOT JMP PLO ; THESE JUMPS WILL ALWAYS BE HERE PLOTTO JMP PTO ; EVEN IF THE CODE CHANGES STAT JMP READY ; EASY VGP STATUS CHECK ENTRY POINT INIT JMP NEW TEST JMP AT MOVETO JMP MOVE ; ; TEMP STORAGE USED BY THE SUPPORT ; DXTLSB DS 1 ; PROJECTION TEMPS DXTMSB DS 1 DYTLSB DS 1 DYTMSB DS 1 ACMDT DS 1 ; COMMAND WORK STORAGE ; READY ROUTINE DOES STATUS CHECK ; READY PHA ; SAVE WORK REGISTER RWAIT LDA STATUS ; READ STATUS AND #$04 ; MASK READY BIT BEQ RWAIT ; NOT DONE, LOOP PLA ; GET VALUE BACK TO A RTS ; AND CONTINUE ; ; MOVE TO A NEW POINT WITHOUT DRAWING ; MOVE JSR READY ; WAIT UNTIL READY LDY #3 MVLP LDA X1H,Y ; GET PASSED PARAMETER STA XMSB,Y ; WRITE TO VGP DEY BPL MVLP RTS ; ; ROUTINE TO DRAW A LINE BETWEEN ANY TWO POINTS ; PLO JSR MOVE ; SET UP START COORDS PTO JSR DSMATH ; CALCULATE DISPLACEMENTS TXA ORA DXTMSB ; IS EITHER PROJECTION > 255 BEQ PLAST ; NO, DO LAST PART OF LINE ; DB2LP: CLC ; DIVIDE DISPLACEMENT BY 2 UNTIL BOTH < 256 ROR DXTMSB ROR DXTLSB CLC ROR DYTMSB ROR DYTLSB LDA DXTMSB ORA DYTMSB ; BOTH < 256 ? BNE DB2LP ; IF NOT DIVIDE AGAIN ; JSR PLAST ; PLOT PART LINE LDA #$88 JSR READY STA CMD JMP PTO ; THEN DO REST OF LINE ; PLAST: LDA DXTLSB ; GET X PROJECTION STA DELTAX ; WRITE TO VGP LDA DYTLSB ; GET Y PROJECTION STA DELTAY ; WRITE TO VGP LDA ACMDT ; GET COMMAND STA CMD ; DRAW THE LINE RTS ; DSMATH: JSR READY ; CALCULATE DISPLACEMENTS SEC ; SET READY FOR SUBTRACT LDA X2L ; GET FIRST X SBC XLSB ; TAKE FROM POSITION REG TAY ; AND SAVE AS DISPLACEMENT LDA X2H ; GET SECOND X SBC XMSB ; TAKE FROM POSITION REG JSR CKSIGN ; SAVE AS DISPLACEMENT STA ACMDT ; SAVE FOR CMD GENERATION STY DXTLSB ; SAVE X DISPLACEMENT STX DXTMSB SEC ; SET READY FOR SUBTRACT LDA Y2L ; GET FIRST Y SBC YLSB ; TAKE FROM POSITION REG TAY ; AND SAVE AS DISPLACEMENT LDA Y2H ; GET SECOND Y SBC YMSB ; TAKE FROM POSITION REG JSR CKSIGN ; SAVE AS DISPLACEMENT ASL A ;SHIFT FOR Y COMPONENT OF COMMAND ORA ACMDT ; ADD IN X COMPONENT ORA #$11 ; ADD IN BASE COMMAND STA ACMDT ; SAVE COMMAND FOR LATER STY DYTLSB ; SAVE Y DISPLACEMENT STX DYTMSB RTS ; ; CKSIGN - UTILITY FOR PLOT CKSIGN: BPL RET0 ; WORKS OUT CORRECT DISPLACEMENT VALUES EOR #$FF ; IF MINUS, MAKE POSITIVE AND #$0F ; LIMIT TO 12 BITS TAX TYA EOR #$FF TAY INY BNE RET2 INX RET2: LDA #2 ; RETURN 2 IF NEGATIVE DISPLACEMENT RTS RET0: AND #$0F TAX LDA #0 RTS ; CMASK: DFB 1,2,4,8,$10,$20,$40,$80 ; AT JSR READY ; WAIT FOR READY LDA XLSB ; GET MASK AND #7 TAY ; Y IS SUBSCRIPT INTO MASK ARRAY LDA #$0F ; DIRECT IMAGE ACCESS REQUEST STA CMD ; SEND THE COMMAND JSR READY ; WAIT UNTIL COMPLETED LDA COLRR ; LOAD COLOUR EOR #$FF ; INVERT AND CMASK,Y ; MASK OFF UNWANTED BEQ XGTM ; IF Z THEN COLOUR = 0 LDA #1 ; ELSE COLOUR = 1 XGTM: STA X1L ; SAVE RESULT IN X1 LDA #0 STA X1H RTS ; ; NEW INITIALISES THE VGP][ ; NEW JSR READY ; WAIT FOR READY LDA #0 STA PAN STA SCROLL LDA #8 STA CTRL4 ; RESET WRITE MODE + BORDER LDA #1 ; UK , INTERLACED FOR CLEAR STA CTRL3 ASL A ; A=2 STA XMSB ; SET WRITE TO PAGE 2 ASL A ; A=4 FOR CLEAR SCREEN STA CMD ; CLEAR PAGE 2 JSR READY LDA #0 STA XMSB LDA #7 STA CMD ; CLEAR PAGE 1, VGP REGS JSR READY LDA #11 STA CTRL1 ; CYCLIC,PEN ON, PEN DOWN RTS