|
|
1.1 ! root 1: PAGE ! 2: SBTTL "--- SCREEN & PRINTER I/O ---" ! 3: ! 4: ; ------------ ! 5: ; RESTART GAME ! 6: ; ------------ ! 7: ! 8: ZSTART: JSR ZCRLF ; FLUSH OUTPUT BUFFER ! 9: CLR SCRIPT ; DISABLE SCRIPTING [ASK 5/28/85] ! 10: ; JSR ENTER ; "PRESS ANY KEY TO CONTINUE"[ASK 5/28/85] ! 11: LDA ZCODE+ZSCRIP+1 ! 12: STA SFLAG ! 13: JMP LUKE ; SKIP SCRIPT DISABLE ! 14: ; FALL THROUGH TO ... ! 15: ! 16: ; --------- ! 17: ; COLDSTART ! 18: ; --------- ! 19: ! 20: COLD: CLR SCRIPT ; DISABLE SCRIPTING ! 21: LUKE: JSR CLS ; A CLEAN SLATE ! 22: LDD #SCREEN+228 ; POSITION ! 23: STD CURSOR ; CURSOR ! 24: LDX #LOADM ! 25: LDB #LOADML ! 26: JSR DLINE ; "LOADING GAME ..." ! 27: JMP START ; AND DO A WARMSTART ! 28: ! 29: LOADM: DB "THE STORY IS LOADING ..." ! 30: LOADML EQU $-LOADM ! 31: ! 32: ; ----- ! 33: ; ERROR ! 34: ; ----- ! 35: ! 36: ; ENTRY: ERROR CODE # IN [A] ! 37: ! 38: INTERR: DB EOL ! 39: DB "INTERNAL ERROR #" ! 40: IERRL EQU $-INTERR ! 41: ! 42: ZERROR: PSHS A ; SAVE CODE # ! 43: JSR ZCRLF ; FLUSH BUFFER ! 44: LDX #INTERR ! 45: LDB #IERRL ! 46: JSR LINE ; "INTERNAL ERROR #" ! 47: PULS A ; RETRIEVE CODE # ! 48: STA TEMP+1 ! 49: CLR TEMP ! 50: JSR NUMBER ; CONVERT ERROR CODE # ! 51: JSR CR1 ; AND SHOW IT ! 52: ! 53: ; FALL THROUGH TO ... ! 54: ! 55: ; ---- ! 56: ; QUIT ! 57: ; ---- ! 58: ! 59: ZQUIT: LDX #ENDSES ! 60: LDB #ENDSL ! 61: JSR LINE ; "END OF SESSION" ! 62: CLR MOTOR ; SHUT DOWN DRIVE MOTOR ! 63: ! 64: ; JSR ROMIN ; MAKE SURE ROM'S ACTIVE [ASK 5/15/85] ! 65: ! 66: FREEZE: BRA FREEZE ; STOP DEAD ! 67: ! 68: ENDSES: DB "END OF SESSION" ! 69: VCODE: DB EOL ; SHARED EOL CHAR ! 70: ENDSL EQU $-ENDSES ! 71: ! 72: ; -------------------------- ! 73: ; DISPLAY ZIP VERSION NUMBER ! 74: ; -------------------------- ! 75: ! 76: DB "COCO 2 VERSION C" ! 77: DB EOL ! 78: VCODEL EQU $-VCODE ! 79: ! 80: VERNUM: LDX #VCODE ! 81: LDB #VCODEL ! 82: JMP LINE ! 83: ! 84: ; ----------------- ! 85: ; PRINT A CHARACTER ! 86: ; ----------------- ! 87: ! 88: COUT: LDX #BUFFER ; POINT TO I/O BUFFER ! 89: LDB CHRPNT ; GET LINE INDEX ! 90: CMPA #EOL ; IF THIS IS A CR, ! 91: BEQ ZCRLF ; HANDLE AS SUCH ! 92: CMPA #SPACE ; IGNORE OTHER CONTROLS ! 93: BLO COUT1 ! 94: ! 95: STA B,X ; SEND CHAR TO BUFFER ! 96: CMPB #31 ; END OF SCREEN LINE? ! 97: BHS FLUSH ; YES, SO FLUSH CURRENT BUFFER ! 98: INC CHRPNT ; ELSE UPDATE INDEX ! 99: COUT1: RTS ; AND LEAVE ! 100: ! 101: ; FLUSH CONTENTS OF [BUFFER] ! 102: ! 103: FLUSH: LDA #SPACE ! 104: FLUSH1: CMPA B,X ; FIND LAST SPACE CHAR ! 105: BEQ FLUSH2 ; IN CURRENT LINE ! 106: DECB ! 107: BNE FLUSH1 ; KEEP SCANNING ! 108: LDB #31 ; SEND ENTIRE LINE IF NONE FOUND ! 109: ! 110: FLUSH2: STB CPSAV ; SAVE ! 111: STB CHRPNT ; # CHARS IN LINE ! 112: JSR ZCRLF ; OUTPUT 1ST PART OF LINE ! 113: ! 114: ; START NEW LINE WITH REMAINDER OF OLD ! 115: ! 116: FLUSH3: INC CPSAV ; GET 1ST CHAR ! 117: LDB CPSAV ; OF REMAINDER ! 118: CMPB #31 ; END OF LINE YET? ! 119: BLS FLUSH4 ; NO, MOVE IT FORWARD ! 120: RTS ; ELSE WE'RE DONE HERE ! 121: ! 122: FLUSH4: LDX #BUFFER ; POINT TO BUFFER ! 123: LDA B,X ; GET OLD CHAR ! 124: LDB CHRPNT ; THIS WAS RESET BY CRLF ! 125: STA B,X ; MOVE TO START OF BUFFER ! 126: INC CHRPNT ; NEXT POSITION ! 127: BRA FLUSH3 ; KEEP MOVING ! 128: ! 129: MORES: DB "[more]" ! 130: MOREL EQU $-MORES ! 131: ! 132: ; --------------- ! 133: ; CARRIAGE RETURN ! 134: ; --------------- ! 135: ! 136: ZCRLF: INC LINCNT ; NEW LINE GOING OUT ! 137: LDA LINCNT ! 138: CMPA #13 ; 13 LINES SENT YET? ! 139: BLO CR1 ; NO, KEEP GOING ! 140: ! 141: BSR ZUSL ; UPDATE STATUS LINE ! 142: ! 143: LDD CURSOR ; GET CURSOR POSITION ! 144: STD TEMP2 ; AND SAVE IT ! 145: ! 146: LDX #MORES ; "[MORE]" ! 147: LDB #MOREL ! 148: JSR DLINE ! 149: ! 150: CLR CFLAG ; NO CURSOR! ! 151: JSR GETKEY ; GET A KEYPRESS ! 152: ! 153: LDD TEMP2 ! 154: STD CURSOR ; RESTORE CURSOR ! 155: ! 156: LDA #SPACE ; ERASE "MORE" MESSAGE ! 157: LDB #MOREL ; WITH SPACES ! 158: SPCS: JSR OUTCHR ! 159: DECB ! 160: BNE SPCS ! 161: ! 162: LDD TEMP2 ! 163: STD CURSOR ; RESTORE CURSOR AGAIN ! 164: CLR LINCNT ; RESET LINE COUNTER ! 165: ! 166: CR1: LDB CHRPNT ! 167: LDX #BUFFER ! 168: LDA #EOL ; INSTALL AN EOL ! 169: STA B,X ; AT END OF CURRENT LINE ! 170: INC CHRPNT ; ADD IT TO CHAR COUNT ! 171: ! 172: LINOUT: TST CHRPNT ; IF NO CHARS IN BUFFER ! 173: BEQ SCDONE ; DON'T PRINT ANYTHING ! 174: OUTPUT: JSR BUFOUT ; ELSE DISPLAY BUFFER ! 175: CLR CHRPNT ; RESET CHAR INDEX ! 176: SCDONE: RTS ; AND RETURN ! 177: ! 178: ; ------------------ ! 179: ; UPDATE STATUS LINE ! 180: ; ------------------ ! 181: ! 182: ZUSL: LDA CHRPNT ; SAVE ALL Z-STRING VARS ! 183: LDB STBYTF ! 184: LDX CURSOR ! 185: LDY ZSTWRD ! 186: PSHS X,Y,D ! 187: LDA MPCH ; HIGH BIT OF MPC ! 188: LDB BINDEX ! 189: LDX MPCM ; LOW BYTES OF MPC ! 190: LDY CSTEMP ; TEMP & PERM TOGETHER! ! 191: PSHS X,Y,D ! 192: ! 193: LDY #BUFSAV ; MOVE OUTPUT BUFFER ! 194: LDX #BUFFER ; TO TEMPORARY STORAGE ! 195: LDB #SPACE ; CLEAR [BUFFER] WITH SPACES ! 196: ZUSL1: LDA ,X ! 197: STB ,X+ ! 198: STA ,Y+ ! 199: CMPX #BUFFER+32 ! 200: BLO ZUSL1 ! 201: ! 202: LDX #SCREEN ! 203: LDA #$20 ; CLEAR OLD STATUS LINE ! 204: ZSL: STA ,X+ ! 205: CMPX #SCREEN+32 ! 206: BLO ZSL ! 207: ! 208: ; DISPLAY ROOM NAME ! 209: ! 210: CLR CHRPNT ; RESET CHAR INDEX ! 211: CLR SCRIPT ; DISABLE SCRIPTING ! 212: LDD #SCREEN ; HOME THE ! 213: STD CURSOR ; CURSOR ! 214: ! 215: LDA #$10 ; GLOBAL VAR #0 (ROOM #) ! 216: JSR VARGET ! 217: LDA TEMP+1 ! 218: JSR PRNTDC ; GET SHORT DESC INTO [BUFFER] ! 219: ! 220: LDA #22 ; ADVANCE BUFFER INDEX ! 221: STA CHRPNT ; INTO SCORING POSITION ! 222: LDA #SPACE ; PRINT A SPACE ! 223: JSR COUT ; TO SEPARATE THINGS (BM 12/6/84) ! 224: ! 225: LDA #$11 ; FETCH GLOBAL VARIABLE ! 226: JSR VARGET ; #1 (SCORE/HOURS) ! 227: TST TIMEFL ; TIME MODE? ! 228: BNE PTIME ; YES IF NZ ! 229: ! 230: ; PRINT SCORE ! 231: ! 232: JSR NUMBER ; PRINT THE VALUE ! 233: LDA #$2F ; ASCII SLASH ! 234: BRA MOVEP ! 235: ! 236: ; PRINT TIME (HOURS) ! 237: ! 238: PTIME: LDA TEMP+1 ! 239: BNE PTIME1 ; 00 IS REALLY 24 ! 240: LDA #24 ! 241: PTIME1: CMPA #12 ! 242: BLE PTIME2 ; IF HOURS IS GREATER THAN 12, ! 243: SUBA #12 ; CONVERT TO 12-HOUR TIME ! 244: STA TEMP+1 ! 245: PTIME2: JSR NUMBER ; SHOW HOURS VALUE ! 246: LDA #$3A ; ASCII COLON ! 247: ! 248: MOVEP: JSR COUT ; SEND COLON (OR SLASH) ! 249: LDA #$12 ; GLOBAL VAR #2 (MOVES/MINUTES) ! 250: JSR VARGET ! 251: TST TIMEFL ; TIME MODE? ! 252: BEQ PNUM ; NO, DO MOVES ! 253: ! 254: ; PRINT MINUTES ! 255: ! 256: LDA TEMP+1 ! 257: CMPA #10 ; IF LESS THAN 10 MINUTES, ! 258: BHS MOVEP1 ! 259: LDA #$30 ; ADD ASCII ZERO FOR PADDING ! 260: JSR COUT ! 261: ! 262: MOVEP1: JSR NUMBER ; SHOW MINUTES ! 263: ! 264: ; PRINT "AM/PM" ! 265: ! 266: LDA #SPACE ; SEPARATE TIMING ! 267: JSR COUT ; FROM "AM/PM" ! 268: LDA #$11 ; GLOBAL #1 AGAIN ! 269: JSR VARGET ! 270: LDA TEMP+1 ! 271: CMPA #12 ; PAST NOON? ! 272: BHS USEPM ; YES, IT'S PM ! 273: LDA #$41 ; "A" ! 274: BRA DOM ! 275: USEPM: LDA #$50 ; "P" ! 276: DOM: JSR COUT ! 277: LDA #$4D ; "M" ! 278: JSR COUT ! 279: BRA AHEAD ; DONE! ! 280: ! 281: ; PRINT # MOVES ! 282: ! 283: PNUM: JSR NUMBER ; SIMPLE, EH? ! 284: ! 285: AHEAD: JSR CR1 ; DUMP BUFFER ! 286: BSR INVERT ; INVERT STATUS LINE ! 287: ! 288: LDY #BUFSAV ; POINT TO "SAVE" BUFFER ! 289: LDX #BUFFER ; POINT TO OUTPUT BUFFER ! 290: USLEND: LDA ,Y+ ! 291: STA ,X+ ; RESTORE PREVIOUS CONTENTS ! 292: CMPX #BUFFER+32 ! 293: BLO USLEND ! 294: ! 295: PULS X,Y,D ; RESTORE EVERYTHING ! 296: STY CSTEMP ! 297: STX MPCM ! 298: STB BINDEX ! 299: STA MPCH ! 300: PULS X,Y,D ! 301: STY ZSTWRD ! 302: STX CURSOR ! 303: STB STBYTF ! 304: STA CHRPNT ! 305: COM SCRIPT ; RE-ENABLE SCRIPTING ! 306: CLR MPCFLG ; MPC NO LONGER VALID ! 307: RTS ! 308: ! 309: ; ------------------ ! 310: ; INVERT STATUS LINE ! 311: ; ------------------ ! 312: ! 313: INVERT: LDX #SCREEN ! 314: REVERS: LDA ,X ! 315: ANDA #%10111111 ; CLEAR BIT 6 (REVERSE VIDEO) ! 316: STA ,X+ ! 317: CMPX #SCREEN+32 ! 318: BLO REVERS ! 319: RTS ! 320: ! 321: END ! 322:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.