Annotation of coco/screen.src, revision 1.1

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.