127 lines
4.2 KiB
Text
127 lines
4.2 KiB
Text
100H:
|
|
/*
|
|
THE PROCEDURES CLOCK AND RND USE A FEATURE OF PICKLES AND TROUT CP/M2
|
|
AND ARE NOT LIKELY TO WORK ON OTHER VERSIONS OF CP/M
|
|
*/
|
|
|
|
BDOS: PROCEDURE (FN, ARG) BYTE; DECLARE FN BYTE, ARG ADDRESS; GO TO 5; END BDOS;
|
|
EXIT: PROCEDURE; MEMORY(0)=BDOS(0,0); END EXIT;
|
|
|
|
TTYIN: PROCEDURE BYTE; DECLARE C BYTE; RETURN BDOS(1,0); END TTYIN;
|
|
|
|
PRINT: PROCEDURE (S); DECLARE S ADDRESS; S=BDOS(9,S); END PRINT;
|
|
|
|
CLOCK: PROCEDURE;
|
|
DECLARE B$ADR ADDRESS; DECLARE B BASED B$ADR BYTE;
|
|
B$ADR=047H;
|
|
B = 0EH; GO TO 043H; END CLOCK;
|
|
|
|
RND: PROCEDURE ADDRESS;
|
|
DECLARE E$ADR ADDRESS; DECLARE E BASED E$ADR BYTE;
|
|
DECLARE D$ADR ADDRESS; DECLARE D BASED D$ADR BYTE;
|
|
DECLARE L$ADR ADDRESS; DECLARE L BASED L$ADR BYTE;
|
|
DECLARE H$ADR ADDRESS; DECLARE H BASED H$ADR BYTE;
|
|
DECLARE (NUM, DE, HL) ADDRESS;
|
|
E$ADR=048H; D$ADR=049H; L$ADR=04AH; H$ADR=04BH;
|
|
CALL CLOCK;
|
|
DE = D * 255 + E; HL = H * 255 + L; NUM = DE * HL; RETURN NUM;
|
|
END RND;
|
|
|
|
EIGHTBALL: DO;
|
|
|
|
|
|
DECLARE CR LITERALLY '13';
|
|
DECLARE CRLF(3) BYTE INITIAL (13,10,'$');
|
|
DECLARE CHR BYTE;
|
|
DECLARE NUM ADDRESS;
|
|
DECLARE GREETING(30) BYTE INITIAL
|
|
('ASK AND ALL WILL BE REVEALED $');
|
|
DECLARE MSG01(41) BYTE INITIAL
|
|
( 'AS I SEE IT, YES $' );
|
|
DECLARE MSG02(41) BYTE INITIAL
|
|
( 'ASK AGAIN LATER $' );
|
|
DECLARE MSG03(41) BYTE INITIAL
|
|
( 'BETTER NOT TELL YOU NOW $' );
|
|
DECLARE MSG04(41) BYTE INITIAL
|
|
( 'CANNOT PREDICT NOW $' );
|
|
DECLARE MSG05(41) BYTE INITIAL
|
|
( 'CONCENTRATE AND ASK AGAIN $' );
|
|
DECLARE MSG06(41) BYTE INITIAL
|
|
( 'DON''T BET ON IT $' );
|
|
DECLARE MSG07(41) BYTE INITIAL
|
|
( 'IT IS CERTAIN $' );
|
|
DECLARE MSG08(41) BYTE INITIAL
|
|
( 'IT IS DECIDEDLY SO $' );
|
|
DECLARE MSG09(41) BYTE INITIAL
|
|
( 'MOST LIKELY $' );
|
|
DECLARE MSG10(41) BYTE INITIAL
|
|
( 'MY REPLY IS NO $' );
|
|
DECLARE MSG11(41) BYTE INITIAL
|
|
( 'MY SOURCES SAY MAYBE $' );
|
|
DECLARE MSG12(41) BYTE INITIAL
|
|
( 'MY SOURCES SAY NO $' );
|
|
DECLARE MSG13(41) BYTE INITIAL
|
|
( 'OUTLOOK GOOD $' );
|
|
DECLARE MSG14(41) BYTE INITIAL
|
|
( 'OUTLOOK NOT SO GOOD $' );
|
|
DECLARE MSG15(41) BYTE INITIAL
|
|
( 'REPLY HAZY, TRY AGAIN $' );
|
|
DECLARE MSG16(41) BYTE INITIAL
|
|
( 'SIGNS POINT TO YES $' );
|
|
DECLARE MSG17(41) BYTE INITIAL
|
|
( 'VERY DOUBTFUL $' );
|
|
DECLARE MSG18(41) BYTE INITIAL
|
|
( 'WITHOUT A DOUBT $' );
|
|
DECLARE MSG19(41) BYTE INITIAL
|
|
( 'YES $' );
|
|
DECLARE MSG20(41) BYTE INITIAL
|
|
( 'YES, DEFINITELY $' );
|
|
DECLARE MSG21(41) BYTE INITIAL
|
|
( 'YES, PROBABLY NOT $' );
|
|
DECLARE MSG22(41) BYTE INITIAL
|
|
( 'YOU MAY RELY ON IT $' );
|
|
DECLARE MSG23(41) BYTE INITIAL
|
|
( 'YOUR QUESTION HAS ALREADY BEEN ANSWERED $' );
|
|
|
|
NUM = RND MOD 24;
|
|
|
|
CALL PRINT(.GREETING);
|
|
CALL PRINT(.CRLF);
|
|
|
|
DO WHILE CHR <> CR;
|
|
CHR = TTYIN;
|
|
END;
|
|
|
|
CALL PRINT(.CRLF);
|
|
|
|
DO CASE NUM;
|
|
CALL PRINT(.MSG01);
|
|
CALL PRINT(.MSG02);
|
|
CALL PRINT(.MSG03);
|
|
CALL PRINT(.MSG04);
|
|
CALL PRINT(.MSG05);
|
|
CALL PRINT(.MSG06);
|
|
CALL PRINT(.MSG07);
|
|
CALL PRINT(.MSG08);
|
|
CALL PRINT(.MSG09);
|
|
CALL PRINT(.MSG10);
|
|
CALL PRINT(.MSG11);
|
|
CALL PRINT(.MSG12);
|
|
CALL PRINT(.MSG13);
|
|
CALL PRINT(.MSG14);
|
|
CALL PRINT(.MSG15);
|
|
CALL PRINT(.MSG16);
|
|
CALL PRINT(.MSG17);
|
|
CALL PRINT(.MSG18);
|
|
CALL PRINT(.MSG19);
|
|
CALL PRINT(.MSG20);
|
|
CALL PRINT(.MSG21);
|
|
CALL PRINT(.MSG22);
|
|
CALL PRINT(.MSG23);
|
|
END;
|
|
CALL PRINT(.CRLF);
|
|
|
|
CALL EXIT;
|
|
|
|
END;
|
|
EOF
|