Annotation of coco/screen.src, revision 1.1.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.