mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-02-21 14:48:01 +00:00
90 lines
2.0 KiB
Plaintext
90 lines
2.0 KiB
Plaintext
SUBTTL PRINTOPS
|
|
PAGE
|
|
|
|
;PRINTC (PRINT CHAR WHOSE ASCII VALUE IS GIVEN)
|
|
PUBLIC OPPRNC,OPPRNN
|
|
OPPRNC PROC
|
|
JMP PUTCHR ;QUEUE THE CHARACTER FOR PRINTING
|
|
OPPRNC ENDP
|
|
|
|
;PRINTN (PRINT A NUMBER)
|
|
OPPRNN PROC
|
|
MOV BX,AX ;NUMBER TO PRINT
|
|
CMP BX,0
|
|
JNE OPN1$ ;NON-ZERO
|
|
MOV AX,"0" ;SPECIAL CASE ZERO
|
|
JMP PUTCHR
|
|
OPN1$: JG OPN2$ ;POSITIVE?
|
|
MOV AX,"-" ;NO, PRINT MINUS SIGN
|
|
CALL PUTCHR
|
|
NEG BX ;AND MAKE IT POSITIVE
|
|
OPN2$: SUB CX,CX ;COUNT OF DIGITS ON STACK
|
|
JMP OPN4$ ;START WITH GREATER-THAN-10 TEST
|
|
OPN3$: MOV AX,BX ;EXTRACT A DIGIT
|
|
MOV BP,10
|
|
CWD
|
|
IDIV BP
|
|
PUSH DX ;PUSH IT
|
|
INC CX ;BUMP COUNT
|
|
MOV BX,AX ;GET QUOTIENT
|
|
OPN4$: CMP BX,10 ;MORE DIGITS TO EXTRACT?
|
|
JGE OPN3$ ;YES, GO LOOP
|
|
MOV AX,BX ;NO, GET LAST (FIRST) DIGIT
|
|
JMP OPN6$ ;ALREADY IN PLACE
|
|
OPN5$: POP AX ;POP NEXT DIGIT
|
|
OPN6$: ADD AX,"0" ;ASCIIZE IT
|
|
CALL PUTCHR ;QUEUE IT
|
|
DEC CX ;REDUCE DIGIT COUNT
|
|
JGE OPN5$ ;LOOP IF SOME LEFT
|
|
RET ;ELSE, RETURN
|
|
OPPRNN ENDP
|
|
|
|
PUBLIC OPPRIN,OPPRNB
|
|
;PRINT (THE STRING POINTED TO BY ES:AX)
|
|
OPPRIN PROC
|
|
CALL BSPLITQ ; (A0) SPLIT THE BLOCK & WORD NUMBERS (QUAD)
|
|
JMP PUTSTR ;PRINT THE STRING
|
|
OPPRIN ENDP
|
|
|
|
;PRINTB (PRINT THE STRING POINTED TO BY THE BYTE-POINTER ES:AX)
|
|
OPPRNB PROC
|
|
CALL BSPLTB ;SPLIT THE BLOCK & BYTE NUMBERS
|
|
JMP PUTSTR ;PRINT THE STRING
|
|
OPPRNB ENDP
|
|
|
|
|
|
PUBLIC OPPRND,OPPRNI,OPPRNR
|
|
;PRINTD (PRINT OBJ'S SHORT DESCRIPTION)
|
|
OPPRND PROC
|
|
CALL OBJLOC ;FIND OBJ'S LOCATION
|
|
MOV BP,AX
|
|
GTAWRD A,[BP].PROPS ; (A0) GET IT
|
|
INC AX ;POINT TO STRING
|
|
CALL BSPLTB ;SPLIT POINTER
|
|
JMP PUTSTR ;AND PRINT THE STRING
|
|
OPPRND ENDP
|
|
|
|
;PRINTI (PRINT THE STRING FOLLOWING THIS INSTRUCTION)
|
|
OPPRNI PROC
|
|
MOV LSTNGD,0 ; (A16) LAST NXT BYTE RUINED
|
|
MOV AX,ZPC1 ;GET POINTER TO STRING
|
|
MOV BX,ZPC2
|
|
CALL PUTSTR ;AND PRINT IT
|
|
MOV ZPC1,AX ;UPDATE ZPC
|
|
MOV ZPC2,BX
|
|
JMP NEWZPC
|
|
OPPRNI ENDP
|
|
|
|
;PRINTR (PRINTI FOLLOWED BY RTRUE)
|
|
OPPRNR PROC
|
|
CALL OPPRNI ;DO A PRINTI
|
|
CALL OPCRLF ;A CRLF
|
|
JMP OPRTRU ;AND AN RTRUE
|
|
OPPRNR ENDP
|
|
|
|
PUBLIC OPCRLF
|
|
;CRLF (DO A NEWLINE)
|
|
OPCRLF PROC
|
|
JMP NEWLIN ;DO A NEWLINE
|
|
OPCRLF ENDP
|