ix742@sdcc6.UUCP (James Hayes) (05/16/86)
Here is the source code for the VIDEX driver. I'm posting it because it might have a few problems. I could only test the driver on VIDEX lookalike equipment, and have not actually seen it work on real VIDEX equipment The source code is not all the commented, but should prove useful if modifications are needed. -Jim Hayes, UCSD ARPA: hayes@UCSD.ARPA UUCP: {ihnp4, ucbvax, decvax, gatech}!sdcsvax!hayes ----CUT----- #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # t.dcom.screen.vdx # This archive created: Thu May 15 19:16:50 1986 # By: James Hayes (UC San Diego EE/CS Department.) export PATH; PATH=/bin:$PATH echo shar: extracting "'t.dcom.screen.vdx'" '(21248 characters)' if test -f 't.dcom.screen.vdx' then echo shar: will not over-write existing file "'t.dcom.screen.vdx'" else sed 's/^XX//' << \SHAR_EOF > 't.dcom.screen.vdx' XX ORG $5000 XX******************************** XX*/VERS. 3.21 07-APR-86 11:37AM * XX******************************** XX* * XX* DCOM.SCREEN.VDX * XX* * XX* * XX* THIS IS THE SCREEN DRIVER * XX* FOR THE VIDEX VIDEOTERM * XX* * XX******************************** XX* XX******************************** XX* * XX* DCOM 3 COMMUNICATIONS FOR * XX* MAINFRAME INTERACTIONS. * XX* * XX* FOR THE //e AND //c SERIES. * XX* * XX******************************** XX* * XX* Copyright(C)1986 James Hayes * XX* ALL RIGHTS RESERVED * XX* * XX* P.O. Box 221044 * XX* University City, CA * XX* 92122-1044 * XX* * XX* (619) 450-9316 * XX* PHONE # VALID UNTIL JUNE '86 * XX* * XX******************************** XX* XX******************************** XX* 80 COLUMN CARD SCREEN * XX* ROUTINES: * XX* * XX******************************** XX JMP INITSCRN XX JMP ZAP XX JMP CLRLINE XX JMP MOVELINE XX JMP STOREXY XX JMP CLEAREOL XX JMP CLEAREOS XX JMP SCROLLUP XX JMP SCROLLDO XX JMP HCP XX JMP CCHECK XX JMP SCP XX JMP PICKUP XX JMP CHOUT XX JMP INSERTLN XX JMP KILLLN XX JMP CLEARBLC XX JMP CLEARHC XX JMP DELTCHAR XX JMP INSTCHAR XX JMP FILLE XX JMP FIXSCRN XX JMP DOCR XX JMP DOLF XX JMP SAVESCRN XX JMP RESTSCRN XX JMP DORESET XX JMP DOUBLEIT XX* XX* XXDUMMY RTS XX* XX******************************** XX* * XX* CARD CONSTANTS * XX* * XX******************************** XX* XXINITDATA HEX 7F50625819001818 XX HEX 0009200000000000 XX* XX* XXSCRNTABL HEX 0050A0F04090E030 XX HEX 80D02070C01060B0 XX HEX 0050A0F04090E030 XX* XXSCRNTABH HEX CCCCCCCCCDCDCDCC XX HEX CCCCCDCDCDCCCCCC XX HEX CDCDCDCDCCCCCCCD XX* XXALSCRNH HEX CCCCCCCCCDCDCBCC XX HEX CCCCCDCDCBCCCCCC XX HEX CDCDCDCBCCCCCCCD XX* XXALSCRNL HEX 0050A0F04090E030 XX HEX 80D02070C01060B0 XX HEX 0050A0F04090E030 XX* XXCHRCONV HEX 207F7F090C0D0A2A XX HEX 2B200B191C16131F XX HEX 1A1A1A1A1A171D1B XX HEX 1E153C3E223D232E XX* XXXSAVE HEX 00 XXUNDER HEX 00 XXUNDSAVE HEX 00 XXXREG HEX 00 XXCURSIS HEX 00 XXCOUNTERL HEX 00 XXCOUNTERH HEX 00 XX* XX******************************** XX* * XX* CARD ACCESS EQUATES * XX* * XX******************************** XX* XXCONTROL EQU $C0B0 XXREGDATA EQU $C0B1 XXDATAE EQU $C300 XXDATAD EQU $CFFF XX* XXSAVEAREA EQU $8400 XXSTUFFBUF EQU $2006 XXMODEINS EQU $301 XXMODEWRAP EQU $305 XXMODEBACK EQU $308 XXMODETOP EQU $30A XXMODEDBL EQU $309 XXMODECHR EQU $30B XXMODEINV EQU $30C XXCX EQU $30F XXCY EQU $310 XXBLINK EQU $311 XXSCRLTOP EQU $312 XXSCRLBOT EQU $313 XX* XXMODETAB EQU $380 XX* XX******************************** XX* * XX* CONTROL ROUTINES * XX* * XX******************************** XX* XX* XX* XXPUTREG STY CONTROL XX STA REGDATA XX RTS XX* XX* XX* XX******************************** XX* 0) INIT SCREEN * XX******************************** XX* XXINITSCRN STA $C059 XX LDY #15 XXINITLOOP LDA INITDATA,Y XX JSR PUTREG XX DEY XX BPL INITLOOP XX RTS XX* XX* XX******************************** XX* 1) ZAP - CLEAR THE SCREEN * XX* RETURNS WITH A, X AND Y * XX* SCRAMBLED * XX******************************** XX* XXZAP LDY #23 ;CLEAR LINES 0-23 WITH "MODEBACK". XXZAP1 JSR CLRLINE ;80 COLUMN SCREEN XX JSR STUFFBUF XX DEY ;NEXT LINE. XX BPL ZAP1 ;BRANCH IF THERE IS MORE TO CLEAR XX RTS ;OTHERWISE, QUIT XX* XX******************************** XX* 2) CLEAR LINE IN Y REG * XX* RETURNS WITH Y INTACT AND * XX* X AND A SCRAMBLED * XX******************************** XX* XXCLRLINE XX LDA #0 XX STA MODETAB,Y XX BIT DATAE XX* XX LDA ALSCRNL,Y XX STA CLR2+1 ;SET UP THE ABSOLUTE STORAGE BELOW XX LDA ALSCRNH,Y XX STA CLR2+2 XX* XX JSR STUFFBUF XX BIT $CFFF XX BIT DATAE XX LDX #79 ;80 COLUMNS TO CLEAR XX JSR VFIX XX LDA MODEBACK ;STORE A MODEBACK. XXCLR2 STA $FFFF,X ;$FFFF IS FILLED IN BY THE LINES ABOVE. XX DEX XX CPX #$F XX BEQ CLFIX XX CPX #$1F XX BEQ CLFIX XX CPX #$3F XX BEQ CLFIX XX INX XX DEX XX BPL CLR2 ;BRANCH IF NOT A LEFT EDGE YET XX*BIT DATAD ;DISABLE 80 COLUMN STORAGE XX JMP STUFFBUF XX* XXCLFIX JSR VFIX XX TXA XX PHA XX JSR STUFFBUF XX BIT $CFFF XX BIT DATAE XX PLA XX TAX XX* XX CPY #6 XX BEQ CHCL32 XX CPY #$C XX BEQ CHCL64 XX CPY #$13 XX BEQ CHCL16 XXEXITCLBS LDA MODEBACK XX JMP CLR2 XX XXCHCL32 CPX #$1F XX BNE EXITCLBS XX JMP SWAP XXCHCL64 CPX #$3F XX BNE EXITCLBS XX JMP SWAP XXCHCL16 CPX #$F XX BNE EXITCLBS XX JMP SWAP XX* XXSWAP XX TXA XX PHA XX JSR STUFFBUF XX BIT $CFFF XX BIT DATAE XX* XX PLA XX TAX XX LDA SCRNTABL,Y XX STA CLR2+1 XX LDA SCRNTABH,Y XX STA CLR2+2 XX LDA MODEBACK XX JMP CLR2 XX* XX* XX******************************** XX* 3) MOVE A LINE FROM X TO Y * XX* RETURNS WITH X AND Y * XX* UNMOLESTED, BUT A * XX* GETS SCRAMBLED * XX******************************** XX* XXMOVELINE XX LDA MODETAB,X XX STA MODETAB,Y XX TXA XX PHA XX JSR STUFFBUF XX BIT $CFFF XX BIT DATAE XX PLA XX TAX XX CPX #6 XX BEQ OLMVLN XX CPX #$C XX BEQ OLMVLN XX CPX #$13 XX BEQ OLMVLN XX CPY #6 XX BEQ OLMVLN XX CPY #$C XX BEQ OLMVLN XX CPY #$13 XX BEQ OLMVLN XX JMP FASTMOVE XX* XX* XXOLMVLN TXA XX PHA XX TYA XX PHA XX TXA XX TAY XX* XX LDA ALSCRNL,Y ;MOVE SCREEN LINES. (USED BY BOTH XX STA SOURCE+1 ;SCROLL ROUTINES.) XX LDA ALSCRNH,Y XX STA SOURCE+2 XX* XX JSR STUFFBUF XX BIT $CFFF XX BIT DATAE XX LDX #79 ;START AT RIGHT SIDE (COL 79) XX JSR VFIX XXSOURCE LDA $FFFF,X XX STA LBUFF,X XX DEX XX CPX #$F XX BEQ CLFIX1 XX CPX #$1F XX BEQ CLFIX1 XX CPX #$3F XX BEQ CLFIX1 XX INX XX DEX XX BPL SOURCE ;BRANCH IF NOT A LEFT EDGE YET XX TXA XX PHA XX JSR STUFFBUF XX BIT $CFFF XX BIT DATAE XX PLA XX TAX XX JMP MOVEXYGT XX* XXCLFIX1 CPY #6 XX BEQ CHCL321 XX CPY #$C XX BEQ CHCL641 XX CPY #$13 XX BEQ CHCL161 XXEXITCLB1 JMP SOURCE XX* XX XXCHCL321 CPX #$1F XX BNE EXITCLB1 XX JMP SWAP1 XXCHCL641 CPX #$3F XX BNE EXITCLB1 XX JMP SWAP1 XXCHCL161 CPX #$F XX BNE EXITCLB1 XX JMP SWAP1 XX* XXSWAP1 JSR VFIX XX TXA XX PHA XX JSR STUFFBUF XX BIT $CFFF XX BIT DATAE XX PLA XX TAX XX LDA SCRNTABL,Y XX STA SOURCE+1 XX LDA SCRNTABH,Y XX STA SOURCE+2 XX JMP SOURCE XX* XXMOVEXYGT XX PLA XX TAY XX LDA ALSCRNL,Y XX STA DEST+1 XX LDA ALSCRNH,Y XX STA DEST+2 XX* XX JSR STUFFBUF XX BIT $CFFF XX BIT DATAE XX LDX #79 XX JSR VFIX XXMOVELOP LDA LBUFF,X XXDEST STA $FFFF,X XX DEX XX JSR XYBELONG XX BMI MOVELOP1 XX BCC SWAP2 XXMOVELOP1 INX XX DEX XX BPL MOVELOP XX JSR STUFFBUF XX PLA XX TAX XX RTS XX XX* XXSWAP2 TXA XX PHA XX JSR STUFFBUF XX PLA XX TAX XX LDA SCRNTABL,Y XX STA DEST+1 XX LDA SCRNTABH,Y XX STA DEST+2 XX JMP MOVELOP1 XX* XX* XX******************************** XX* 4) STORE AT X,Y. STORES ACC. * XX* AT X,Y. RETURNS WITH Y * XX* UNTOUCHED, BUT X AND A * XX* ARE GONE. * XX******************************** XX* XX* XXSTOREXY PHA XX BIT DATAE XX TXA XX PHA XX JSR STUFFBUF XX PLA XX TAX XX JSR VFIX XX JSR XYBELONG XX BMI XYDONOR2 XX BCC XYDONORM XXXYDONOR2 LDA ALSCRNL,Y XX STA STRBYTE+1 XX LDA ALSCRNH,Y XX STA STRBYTE+2 XX JMP DOFINAL XXXYDONORM LDA SCRNTABL,Y XX STA STRBYTE+1 XX LDA SCRNTABH,Y XX STA STRBYTE+2 XX* XXDOFINAL PLA XXSTRBYTE STA $FFFF,X XX* XX JSR STUFFBUF ;"INTERUPT" TO CHECK MODEM XX RTS XX* XX******************************** XX* 5) CLEAR FROM CX,CY TO END * XX* OF LINE. RETURNS NOTHING * XX* INTACT. * XX******************************** XX* XXCLEAREOL LDX CX XX CPX #0 XX BNE CLEAREOX XX LDY CY XX JMP CLRLINE XXCLEAREOX LDX #79 ;START AT THE LAST COLUMN XX LDY CY ;GET LINE TO DO THE CLEAR ON. XX LDA MODEBACK ;"SPACE" XXCLEAREO1 STX XREG ;STORE THE X REG. XX JSR STOREXY ;STORE IT. XX LDX XREG ;GET X BACK. XX CPX CX ;ARE WE DONE YET? XX BEQ QUITCLR ;BRANCH IF YES. XX DEX XX JMP CLEAREO1 ;LOOP, IF NOT. XXQUITCLR RTS XX* XX******************************** XX* 6) CLEAR FROM (CX,CY) TO END * XX* OF SCREEN. NOTHING EVEN * XX* GETS CLOSE TO RETURNING * XX* INTACT. * XX******************************** XX* XXCLEAREOS JSR CLEAREOL ;CLEAR TO END OF LINE. XX* XX LDY #23 ;START WITH LAST LINE XXCLRLOOP CPY CY ;DONE? (YREG=CY?) XX BEQ CLRDONE ;BRANCH IF SO. XX JSR CLRLINE ;OTHERWISE CLEAR LINE Y XX DEY ;DO NEXT LINE XX JMP CLRLOOP ;DO IT. XXCLRDONE RTS XX* XX******************************** XX* 7) SCROLL THE DISPLAY UP ONE * XX* LINE. YOU'LL BE LUCKY IF * XX* THE PROCESSOR STATUS BYTE * XX* RETURNS THE SAME.... * XX******************************** XX* XXSCROLLUP XX LDY SCRLTOP ;DEST LINE XX INY XX TYA XX TAX XX DEY XXSCRUP1 JSR MOVELINE ;SWAP ODD LOCS ON LINE Y XX INY ;INC Y AND X XX INX XX CPX SCRLBOT ;AT BOTTOM? XX BLT SCRUP1 ;BRANCH IF NOT XX BEQ SCRUP1 XX LDY SCRLBOT ;CLEAR... XX JMP CLRLINE ;BOTTOM LINE XX XX* XX******************************** XX* 8) SCROLL THE DISPLAY DOWN * XX* REGISTERS? WHAT DOES #7 * XX* SAY? GOOD. FOLLOW THAT. * XX******************************** XX* XXSCROLLDO LDY SCRLBOT ;START FROM... XX DEY XX TYA XX TAX XX INY XX* XXSCRDOWN1 JSR MOVELINE ;MOVE THE LINES UP ONE BY ONE. XX DEY ;NEXT LINES XX DEX XX CPY SCRLTOP XX BNE SCRDOWN1 ;LOOP IF NOT FINISHED XX LDY SCRLTOP ;CLEAR TOP LINE XX JMP CLRLINE XX XX* XX******************************** XX* 9) HIDE THE CURRENT CURSOR. * XX* REGISTERS: DESTROYED * XX******************************** XX* XXHCP BIT CURSIS XX BMI DOHCP XX RTS XXDOHCP LDA UNDER ;PUT BACK THE CHAR UNDER THE CURSOR. XX LDX CX ;GET THE CURSOR LOCATIONS XX LDY CY XX JSR STOREXY ;AND STORE IT TO THE SCREEN XX LDA #0 XX STA CURSIS XX JMP RESET XX* XX******************************** XX* 9A) CURSOR BLINK ROUTINE * XX******************************** XX* XXCCHECK LDX BLINK ;HAS THE BLINK BEEN TURNED ON? XX BNE CCHECK1 ;BRANCH IF YES XX RTS ;OTHERWISE, EXIT. XX* XXCCHECK1 INC COUNTERL ;INCREMENT THE FLASH COUNTER XX BEQ INCHC ;HAVE WE 256 LOOPS? BRANCH IF SO. XX JMP CHECKH ;CHECK FOR OUT OF BOUNDS XXINCHC INC COUNTERH ;INCREMENT THE HIGH BYTE XXCHECKH LDX COUNTERH ;GET IT BACK FOR CHECKING XX CPX BLINK ;HAVE WE HIT THE BLINK TIME? XX BEQ TOGGLE ;IF SO, TOGGLE THE CURSOR XX RTS ;AND SAY BYE, BYE XX* XXTOGGLE BIT CURSIS ;WHAT IS THE CURRENT CURSOR STATUS? (ON OR OFF?) XX BPL ISOFF ;BRANCH IF OFF XX JSR HCP ;HIDE THE CURSOR XX LDA #00 ;AND RESET THE XX STA CURSIS ;CURSOR STATUS BYTE XX RTS XXISOFF JSR SCP ;SHOW THE CURSOR XX LDA #$80 ;AND RESET THE XX STA CURSIS ;CURSOR STATUS BYTE XX RTS XXRESET LDA #0 ;RESET THE CURSOR COUNTERS XX STA COUNTERL XX STA COUNTERH XX RTS XX* XX* XX******************************** XX* 10) SHOW CURSOR POSITION. * XX* REGISTERS YOU ASK? DESTROYED * XX******************************** XX* XXSCP BIT CURSIS XX BMI SCPEXIT XX LDX CX ;GET X AND... XX LDY CY ;Y XX JSR PICKUP ;PICK IT OFF THE SCREEN XX STA UNDER ;GOT IT, NOW STORE THE ACC. XX EOR #$80 ;INVERT THE CHARACTER (THE NEW CURSOR) XX LDX CX ;PLACE THE NEW "CURSOR" ON THE SCREEN XX JSR STOREXY XX LDA #$80 XX STA CURSIS XX** XX* SET DOUBLE, ETC. XX* XX LDY CY ; GET THE LINE XX LDA MODETAB,Y ;GET THE CURRENT MODE OF THE LINE. XX ROL ;SHIFT OVER TO ACCESS THE HIGE BIT. XX BCS SETDUBMD ;SET DOUBLE MODE XX LDX #0 XX STX MODEDBL ;CLEAR IT XX LDX #$FF ;SET THE UPPER HALF OF THE SET XX STX MODETOP XX* XX JMP SCPEXIT XXSETDUBMD LDX #$FF XX STX MODEDBL XX ROL ;SHIFT OVER TO ACCESS TOP/BOTTOM BIT XX BCS SETBOT XX LDX #00 XX STX MODETOP XX JMP SCPEXIT XXSETBOT LDX #$FF XX STX MODETOP XXSCPEXIT XX JMP RESET XX* XX******************************** XX* 11) GET THE CHARACTER AT * XX* (X,Y) ON THE SCREEN AND * XX* PUT IN ACC. REGISTERS: Y * XX* REMAINS INTACT * XX******************************** XX* XXPICKUP BIT DATAE XX TXA XX PHA XX JSR STUFFBUF XX PLA XX TAX XX JSR VFIX XX JSR XYBELONG XX BCC XYDONOR1 XX LDA ALSCRNL,Y XX STA STRBYT1+1 XX LDA ALSCRNH,Y XX STA STRBYT1+2 XX JMP STRBYT1 XXXYDONOR1 LDA SCRNTABL,Y XX STA STRBYT1+1 XX LDA SCRNTABH,Y XX STA STRBYT1+2 XX* XXSTRBYT1 LDA $FFFF,X XX* XX JSR STUFFBUF ;"INTERUPT" TO CHECK MODEM XX RTS XX* XX* XX******************************** XX* 12) OUTPUT WHAT EVER IS IN * XX* ACC. WITH RESPECT TO * XX* THE INVERSE FLAG. * XX* KILLS X AND Y. ONLY GETS * XX* A SCRAMBLED WHEN SCREEN * XX* SCROLLS * XX******************************** XX* THIS (BELOW) IS JUST A SUBROUTINE OF CHOUT. XXCONCHRSET XX BIT MODECHR ;ADDED TO HANDLE GRAPHIC CHARACTER SETS. XX BPL CONEXIT ;NOTHING TO CONVERT. OH WELL. XX CMP #$5F ;PART OF THE CONVERSION SET? XX BLT CONEXIT XX* XX SEC XX SBC #$5F XX TAY XX LDA CHRCONV,Y ;GET THE CONVERTED CHARACTER XXCONEXIT BIT MODETOP XX BMI REALEXIT XX LDA #$2D ;OR OUTPUT A DASH IF DOUBLE WIDE BOTTOM HALF. XXREALEXIT RTS XX* XXNEXTLINE HEX 00 XX* XXCHOUT JSR CONCHRSET XX PHA XX JSR HCP XX BIT NEXTLINE XX BPL SKIPSCRL XX* XX* THE SECTION DETERMINES IF THE LAST STORE RESULTED IN XX* THE POSSIBILITY OF THE SCREEN SCROLLING ON THE XX* NEXT STORE. FOR EXAMPLE: THE SCREEN SHOULD XX* NOT SCROLL WHEN OUTPUT IS MADE TO COLUMN 80 OF LINE XX* 24. BUT SHOULD ON THE NEXT OUTPUT UNLESS XX* THE CURSOR POSITION IS MOVED. XX* XX LDX CX XX CPX #79 XX BNE SKIPSCRL XX BIT MODEWRAP XX BPL SKIPSCRL XX LDX #0 XX STX CX XX INC CY XX LDY CY XX CPY SCRLBOT XX BLT SKIPSCRL XX BEQ SKIPSCRL XX* XX JSR SCROLLUP XX DEC CY XX* XXSKIPSCRL LDX #00 XX STX NEXTLINE XX BIT MODEINS ;INSERT MODE ON? XX BPL NOINS XX JSR INSTCHAR XXNOINS XX LDX CX ;GET THE X XX LDY CY ;AND Y LOCATIONS. XX PLA XX XX BIT MODEBACK XX BPL CHINVRS XX EOR #$80 XXCHINVRS BIT MODEINV ;INVERSE? XX BPL NORMOUT ;NOPE, DO NORMAL XX EOR #$80 XXNORMOUT JSR STOREXY XX INC CX XX LDX CX XX CPX #80 XX BLT OKAY1 XXDOCR1 LDA #$FF XX STA NEXTLINE XX DEC CX XXOKAY1 JMP SCP XX* XX* XX* XX* XXDOCR LDX #00 XX STX CX XXDOLF INC CY ;AND DO A LINE FEED. XX LDY CY ;INCREMENT Y AND DO A RANGE CHECK. XX CPY #24 ;OFF SCREEN? XX BEQ DOSCR ;BRANCH IF SO AND DO SCROLL UP. XX CPY SCRLBOT XX BGE DODOSCR XXOKAY JMP SCP ;DISPLAY CURSOR. XXDODOSCR BEQ OKAY XX* XX* XXDOSCR JSR SCROLLUP ;SCROLL THE SCREEN UP XX LDY SCRLBOT ;RESET THE CURSOR POSITION TO THE LAST LINE. XX STY CY ;STORE IT. XX JMP SCP ;SHOW THE NEW CURSOR. XX* XX******************************** XX* 13) INSERT A NEW LINE AT CY * XX* AND RETURN CX TO LEFT * XX* SIDE. NO REGISTERS * XX* RETURN O.K. * XX******************************** XX* XXINSERTLN JSR HCP ;HIDE CURSOR XX LDX #0 ;RESET TO LEFT SIDE XX STX CX XX LDY CY ;GET Y XX CPY #00 ;AT TOP? XX BEQ DOBACKIN ;IF SO, JUST SCROLL BACKWARDS (BELOW) XX* XX LDY #23 ;START AT BOTTOM XX LDX #22 XXINSERTL1 JSR MOVELINE ;MOVE ON PAIR OF LINES XX DEY ;NEXT PAIR. UP ONE XX DEX XX CPX CY ;DONE? XX BGE INSERTL1 ;BRANCH IF => CY AND DO AGAIN XX JSR CLEAREOL ;CLEAR TO END OF LINE XX JMP SCP ;SHOW CURSOR AND EXIT XX* XXDOBACKIN JSR SCROLLDO XX JMP SCP XX* XX******************************** XX* 14) DELETE LINE AT CY AND * XX* RETURNS CX TO LEFT SIDE. * XX* NO REG'S INTACT * XX******************************** XX* XXKILLLN LDX #0 XX STX CX ;RESET X TO LEFT EDGE XX JSR HCP ;HIDE THE CURSOR XX LDY CY ;GET Y (DEST. LINE) XX CPY #23 ;ALREADY AT BOTTOM? XX BEQ KILLLNCL ;IF SO, JUST ERASE THE BOTTOM LINE XX* XX XX TYA ;XFER Y TO X XX TAX XX INX ;AND INCREMENT X TO GET SOURCE LINE. XXKILLLN1 JSR MOVELINE ;MOVE SOURCE TO DEST. XX INY ;NEXT! XX INX XX CPX #24 ;AT BOTTOM? XX BNE KILLLN1 ;DO AGAIN IF NOT XXKILLLNCL LDY #23 ;OTHERWISE, CLEAR THE BOTTOM LINE. XX JSR CLRLINE XX JMP SCP ;SHOW THE CURSOR. XX* XX******************************** XX* 16) CLEAR FROM BEGINNING OF * XX* LINE TO THE CURSOR * XX******************************** XX* XXCLEARBLC JSR HCP XX LDX CX XX STX OLDX XX LDY CY XX STY OLDY XX* XXERSLOOP LDA MODEBACK XX JSR STOREXY XX LDY OLDY XX DEC OLDX XX LDX OLDX XX BPL ERSLOOP XX JSR SCP XX RTS XX* XXOLDX HEX 00 XXOLDY HEX 00 XX* XX******************************** XX* 17) CLEAR FROM HOME TO * XX* CURSOR * XX******************************** XX* XXCLEARHC JSR HCP XX LDY CY XX BEQ SKIPCLR XX* XX DEY XX STY OLDY XXCLRLOOP1 JSR CLRLINE XX DEC OLDY XX LDY OLDY XX BPL CLRLOOP1 XX JSR CLEARBLC XXSKIPCLR RTS XX* XX******************************** XX* 18) DELETE THE CHARACTER * XX* UNDER THE CURSOR AND MOVE* XX* EVERYTHING ELSE OVER. * XX******************************** XX* XX* XXDELTCHAR JSR HCP XX LDX CX XX STX OLDX XX* XXDELTCHLP LDX OLDX XX INX XX LDY CY XX JSR PICKUP XX LDX OLDX XX LDY CY XX JSR STOREXY XX* XX INC OLDX XX LDX OLDX XX CPX #79 XX BLT DELTCHLP XX XX LDX #79 XX LDY CY XX LDA MODEBACK XX JSR STOREXY XX JSR SCP XX RTS XX* XX******************************** XX* 19) INSERT A BLANK IN THE * XX* CURRENT LINE. * XX******************************** XX* XX* XXINSTCHAR XX LDX CX XX CPX #79 XX BEQ EXIT XX JSR SCP XX LDX #78 XX STX XSAVE XX* XXINSERTLP LDX XSAVE XX JSR PICKUP XX LDX XSAVE XX INX XX JSR STOREXY XX LDX XSAVE XX CPX CX XX BEQ INSLOPEX XX DEC XSAVE XX JMP INSERTLP XXINSLOPEX LDX CX XX LDY CY XX LDA MODEBACK XX JSR STOREXY XXEXIT RTS XX* XX******************************** XX* 20) FILL THE SCREEN W/E'S * XX******************************** XX* XXMODEBSTR HEX 00 XX* XXFILLE JSR HCP XX LDX MODEBACK XX STX MODEBSTR XX* XX LDX #69 XX STX MODEBACK XX JSR ZAP XX LDX MODEBSTR XX STX MODEBACK XX JSR SCP XX RTS XX* XX******************************** XX* 21) INVERT THE SCREEN. * XX******************************** XX* XXFIXLINE XX* XX******************************** XX* FIX THE LINE IN Y * XX******************************** XX* XX BIT DATAE XX* XX LDA ALSCRNL,Y XX STA CLR3+1 ;SET UP THE ABSOLUTE STORAGE BELOW XX STA CLR32+1 XX LDA ALSCRNH,Y XX STA CLR3+2 XX STA CLR32+2 XX* XX LDX #79 ;80 COLUMNS TO CLEAR XX JSR VFIX XXCLR3 LDA $FFFF,X ;$FFFF IS FILLED IN BY THE LINES ABOVE. XX EOR #$80 XXCLR32 STA $FFFF,X XX DEX XX CPX #$F XX BEQ CLFIX2 XX CPX #$1F XX BEQ CLFIX2 XX CPX #$3F XX BEQ CLFIX2 XX INX XX DEX XX BPL CLR3 ;BRANCH IF NOT A LEFT EDGE YET XX*BIT DATAD ;DISABLE 80 COLUMN STORAGE XX JMP STUFFBUF XX* XXCLFIX2 JSR VFIX XX* XX CPY #6 XX BEQ CHCL322 XX CPY #$C XX BEQ CHCL642 XX CPY #$13 XX BEQ CHCL162 XXEXITCLB2 LDA MODEBACK XX JMP CLR3 XX XXCHCL322 CPX #$1F XX BNE EXITCLB2 XX JMP SWAP3 XXCHCL642 CPX #$3F XX BNE EXITCLB2 XX JMP SWAP3 XXCHCL162 CPX #$F XX BNE EXITCLB2 XX JMP SWAP3 XX* XXSWAP3 LDA SCRNTABL,Y XX STA CLR32+1 XX STA CLR3+1 XX LDA SCRNTABH,Y XX STA CLR32+2 XX STA CLR3+2 XX LDA MODEBACK XX JMP CLR3 XX* XX* XXFIXSCRN JSR HCP XX LDY #23 XXFIXLOOP JSR FIXLINE XX DEY XX BPL FIXLOOP XX JSR SCP XX RTS XX* XX* XX******************************** XX* SAVE SCREEN! SAVE SCREEN! * XX******************************** XX* XXSAVEBANK LDX #$00 XXSAVEBAN1 LDA $CC00,X XXSAVER STA $FFFF,X XX DEX XX BNE SAVEBAN1 XX* XX INC SAVER+2 XX INC SAVER1+2 XX JSR STUFFBUF XX BIT $CFFF XX LDA DATAE XXSAVEBAN2 LDA $CD00,X XXSAVER1 STA $FFFF,X XX DEX XX BNE SAVEBAN2 XX* XX INC SAVER+2 XX INC SAVER1+2 XX JSR STUFFBUF XX RTS XX* XXRESTBANK LDX #00 XXRESTER LDA $FFFF,X XX STA $CC00,X XX DEX XX BNE RESTER XX INC RESTER+2 XX INC RESTER1+2 XX JSR STUFFBUF XX BIT $CFFF XX BIT DATAE XXRESTER1 LDA $FFFF,X XX STA $CD00,X XX DEX XX BNE RESTER1 XX* XX INC RESTER+2 XX INC RESTER1+2 XX JSR STUFFBUF XX RTS XX* XX******************************** XX* SAVE A SCREEN TO MEMORY * XX* STARTING AT #SAVE AREA * XX******************************** XX* XXSAVESCRN JSR HCP XX LDX #<SAVEAREA XX STX SAVER+1 XX STX SAVER1+1 XX LDX #>SAVEAREA XX STX SAVER+2 XX STX SAVER1+2 XX* XX LDA $C0B0 XX JSR SAVEBANK XX LDA $C0B4 XX JSR SAVEBANK XX LDA $C0B8 XX JSR SAVEBANK XX LDA $C0BC XX JSR SAVEBANK XX* XX XXQUITSAVE LDY #$A0 XXQSLOOP LDA $300,Y XX STA $8100,Y XX DEY XX CPY #$FF XX BNE QSLOOP XX* XX BIT DATAD XX RTS XX* XX******************************** XX* RESTORE SCREEN * XX******************************** XX* XXRESTSCRN LDX #<SAVEAREA XX STX RESTER+1 XX STX RESTER1+1 XX LDX #>SAVEAREA XX STX RESTER+2 XX STX RESTER1+2 XX* XX LDA $C0B0 XX JSR RESTBANK XX LDA $C0B4 XX JSR RESTBANK XX LDA $C0B8 XX JSR RESTBANK XX LDA $C0BC XX JSR RESTBANK XX* XXQUITREST LDY #$A0 XXQULOOP LDA $8100,Y XX STA $300,Y XX DEY XX CPY #$7F XX BNE QULOOP XX LDY #$0F XX LDA $8100,Y XX STA $300,Y XX INY XX LDA $8100,Y XX STA $300,Y XX BIT DATAD XX LDA UNDSAVE XX STA UNDER XX LDA #0 XX STA CURSIS XX JSR SCP XX RTS XX******************************** XX* RESET THE SCREEN LINE TO * XX* NORMAL WIDTH, AFTER A DOUBLE * XX* WIDTH CHANGE. * XX******************************** XX* XX* XXDORESET JSR HCP ;Reset the line width and reset cursor XX* XXDORESET1 LDX #0 XX STX DSOURCE XX STX DDEST XX JSR HCP XX* XXDORESET2 LDY CY XX LDX DSOURCE XX JSR PICKUP XX LDY CY XX LDX DDEST XX JSR STOREXY XX INC DSOURCE XX INC DSOURCE XX INC DDEST XX LDY DDEST XX CPY #40 XX BEQ DORESET3 XX JMP DORESET2 XXDORESET3 JSR SCP XX LDA CX XX PHA XX JSR HCP XX LDX #40 XX LDY CY XX STX CX XX JSR CLEAREOL XX PLA XX STA CX XX JSR SCP XX RTS XX* XX* XX* XXDSOURCE HEX 00 XXDDEST HEX 00 XX* XX******************************** XX* DOUBLE (MAKE WIDE) THE * XX* CURRENT SCREEN LINE. * XX******************************** XX* XXDOUBLEIT LDX #39 XX STX DSOURCE XX LDY #78 XX STY DDEST XX* XXDBLOOP LDX DSOURCE XX LDY CY XX JSR PICKUP XX LDX DDEST XX LDY CY XX JSR STOREXY XX DEC DDEST XX LDY CY XX LDX DDEST XX LDA MODEBACK XX JSR STOREXY XX DEC DDEST XX DEC DSOURCE XX* XX LDY DSOURCE XX BEQ DBLEXIT XX JMP DBLOOP XXDBLEXIT RTS XX******************************** XX* GIVEN AN X AND Y COORDINATE, * XX* THIS ROUTINE WILL SWITCH IN * XX* THE APPROPRIATE SECTION OF * XX* THE VIDEO SCREEN. * XX******************************** XX* XXVFIX XX* XX TXA XX PHA XX JSR STUFFBUF XX PLA XX TAX XX BIT $C300 XX CPY #7 XX BLT BANK1CHK XX CPY #$D XX BLT BANK2CHK XX CPY #$14 XX BLT BANK3CHK XXBANK4 LDA $C0BC XX LDA #4 XX XX RTS XXBANK1CHK CPY #6 XX BEQ BN1MIDLN XXSWINB1 LDA $C0B0 XX LDA #1 XX XX RTS XXBN1MIDLN CPX #$20 XX BLT SWINB1 XXSWINB2 LDA $C0B4 XX LDA #2 XX XX RTS XXBANK2CHK CPY #$C XX BEQ BN2MIDLN XX LDA $C0B4 XX LDA #2 XX XX RTS XXBN2MIDLN CPX #$40 XX BLT SWINB2 XXSWINB3 LDA $C0B8 XX LDA #3 XX XX RTS XX* XXBANK3CHK CPY #$13 XX BEQ BN3MIDLN XX LDA $C0B8 XX LDA #3 XX XX RTS XXBN3MIDLN CPX #$10 XX BLT SWINB3 XX LDA $C0BC XX LDA #4 XX XX RTS XX* XX* XX******************************** XX* SEE IF X,Y BELONG TO THE * XX* ALTERNATE TABLE OR THE * XX* MASTER TABLE. * XX******************************** XX* CARRY CLEAR TO USE NORMAL, * XX* CARRY SET TO USE ALT. * XX******************************** XX* XXXYBELONG TXA XX PHA XX JSR STUFFBUF XX PLA XX TAX XX CLV XX CPY #6 XX BEQ CHECKAL1 XX CPY #$C XX BEQ CHECKAL2 XX CPY #$13 XX BEQ CHECKAL3 XX CLC XX LDA #$FF XX RTS XX* XXCHECKAL1 XX CPX #$20 XX BLT NORMFLGS XX SEC XX LDA #$FF XX RTS XXCHECKAL2 XX CPX #$40 XX BLT NORMFLGS XX LDA #$FF XX SEC XX RTS XXCHECKAL3 XX CPX #$10 XX BLT NORMFLGS XX SEC XX LDA #$FF XX RTS XXNORMFLGS CLC XX JSR VFIX XX LDA #$00 XX RTS XX******************************** XX* FAST MOVE. MOVE LINE WITHOUT* XX* CHECKING. ASSUMES IN SAME * XX* AS SOURCE AND DESTINATION * XX******************************** XX* XX* XX* XXFASTMOVE LDA SCRNTABL,X XX STA SOURCE1+1 XX LDA SCRNTABH,X XX STA SOURCE1+2 XX LDA SCRNTABL,Y XX STA DEST1+1 XX LDA SCRNTABH,Y XX STA DEST1+2 XX* XX TXA XX PHA XX JSR STUFFBUF XX LDX #79 XX JSR VFIX XXSOURCE1 LDA $FFFF,X XXDEST1 STA $FFFF,X XX DEX XX BPL SOURCE1 XX JSR STUFFBUF XX PLA XX TAX XX RTS XX* XX* XX* XXLBUFF HEX 00 XX* SHAR_EOF if test 21248 -ne "`wc -c < 't.dcom.screen.vdx'`" then echo shar: error transmitting "'t.dcom.screen.vdx'" '(should have been 21248 characters)' fi fi # end of overwriting check # End of shell archive exit 0