|
|
1.1 root 1: PAGE 1.1.1.2 ! root 2: ;SBTTL "--- SCREEN & PRINTER I/O ---" 1.1 root 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: 1.1.1.2 ! root 29: LOADM: .STR "THE STORY IS LOADING ..." ! 30: LOADML EQU *-LOADM 1.1 root 31: 32: ; ----- 33: ; ERROR 34: ; ----- 35: 36: ; ENTRY: ERROR CODE # IN [A] 37: 1.1.1.2 ! root 38: INTERR: .DB EOL ! 39: .STR "INTERNAL ERROR #" ! 40: IERRL EQU *-INTERR 1.1 root 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: 1.1.1.2 ! root 68: ENDSES: .STR "END OF SESSION" ! 69: VCODE: .DB EOL ; SHARED EOL CHAR ! 70: ENDSL EQU *-ENDSES 1.1 root 71: 72: ; -------------------------- 73: ; DISPLAY ZIP VERSION NUMBER 74: ; -------------------------- 75: 1.1.1.2 ! root 76: .STR "COCO 2 VERSION C" ! 77: .DB EOL ! 78: VCODEL EQU *-VCODE 1.1 root 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: 1.1.1.2 ! root 129: MORES: .STR "[more]" ! 130: MOREL EQU *-MORES 1.1 root 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: 1.1.1.2 ! root 321: ;END 1.1 root 322:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.