├── LICENSE ├── Makefile ├── README.md ├── ast.inc ├── bascli.mac ├── bascpm.mac ├── basdat.mac ├── basdef.inc ├── baserr.mac ├── basfp.mac ├── basic1.mac ├── basic2.mac ├── basic3.mac ├── basic4.mac ├── basic5.mac ├── basinit.mac ├── basmain.mac ├── basrsx.mac ├── bastkn.inc ├── bin ├── basic.com └── basic.tsk ├── docs ├── Changelog.txt ├── basic_tokens.txt └── if-note.txt ├── errors.inc ├── fcb.inc ├── help └── basic.hlp ├── programs ├── Makefile ├── acey.bas ├── actfilter.rlc ├── awari.bas ├── bagles.bas ├── bandit.bas ├── batnum.bas ├── blackjack.bas ├── bomb.bas ├── bounce.bas ├── boxing.bas ├── bug.bas ├── buzzwd.bas ├── chomp.bas ├── civilwar.bas ├── crap.bas ├── cycles.bas ├── dates.bas ├── demo.bas ├── dice.bas ├── dragrace.bas ├── example1.bas ├── example2.bas ├── football.bas ├── fruit.bas ├── geowar.bas ├── golf.bas ├── gomoko.bas ├── guess.bas ├── guess1.bas ├── guess2.bas ├── gunner.bas ├── hamurs.bas ├── hangman.bas ├── hangman2.bas ├── hiq.bas ├── hockey.bas ├── hun.bas ├── hurkle.bas ├── island.bas ├── joke.bas ├── keno.bas ├── life.bas ├── lit.bas ├── loan.bas ├── lpfilter.rlc ├── lunar.bas ├── magicsq.bas ├── mandel.bas ├── market.bas ├── mastrmnd.bas ├── match.bas ├── maze.bas ├── oregon.bas ├── othello.bas ├── pattern.bas ├── pilot.bas ├── poem.bas ├── puzzle.bas ├── reverse.bas ├── rlci.bas ├── rocket.bas ├── rocket.txt ├── roll.bas ├── rotate.bas ├── roulet.bas ├── rsp.bas ├── rusrou.bas ├── ship.bas ├── sinetest.bas ├── stock.bas ├── story.bas ├── swami.bas ├── synonym.bas ├── tictac.bas ├── tower.bas ├── trade.bas ├── trader.bas ├── trek.doc ├── trek100.bas ├── trek52.bas ├── tvshow.bas ├── vreg1.rlc ├── vreg2.rlc ├── vreg3.rlc ├── war.bas ├── waves.bas └── weekday.bas ├── qio.inc ├── sysfn.inc └── tcb.inc /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020, Hector Peraza 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Path to Linux utilities 2 | ZXCC = zxcc 3 | VOL180 = ../../Tools/linux/vol180/vol180 4 | 5 | # Path to CP/M utilities 6 | ZSM4 = ../../Tools/cpm/zsm4.com 7 | TKB = ../../Tools/cpm/tkb.com 8 | 9 | .PREFIX: 10 | .PREFIX: .mac .rel 11 | 12 | SRCS = basmain.mac \ 13 | basinit.mac \ 14 | bascli.mac \ 15 | basic1.mac \ 16 | basic2.mac \ 17 | basic3.mac \ 18 | basic4.mac \ 19 | basic5.mac \ 20 | baserr.mac \ 21 | basdat.mac \ 22 | basfp.mac \ 23 | basrsx.mac \ 24 | bascpm.mac 25 | 26 | OBJS = $(SRCS:.mac=.rel) 27 | 28 | PROGRSX = basic.tsk 29 | PROGCPM = basic.com 30 | 31 | all: $(PROGRSX) $(PROGCPM) 32 | 33 | $(OBJS): %.rel: %.mac *.inc 34 | $(ZXCC) $(ZSM4) -"="$ build.cmd 38 | @echo -e "basfp,bascli,basic1,basic2,basic3,basic4,basic5,&\r" >> build.cmd 39 | @echo -e "baserr,basrsx,basinit,basdat/task=...BAS/asg=TI:1,SY:2-13\r" >> build.cmd 40 | $(ZXCC) $(TKB) -"@build.cmd" 41 | @rm build.cmd 42 | 43 | $(PROGCPM): $(OBJS) 44 | @echo -e $@",basiccpm.sym=basmain/ofmt:com,&\r" > build.cmd 45 | @echo -e "basfp,bascli,basic1,basic2,basic3,basic4,basic5,&\r" >> build.cmd 46 | @echo -e "baserr,bascpm,basinit,basdat\r" >> build.cmd 47 | $(ZXCC) $(TKB) -"@build.cmd" 48 | @rm build.cmd 49 | 50 | copy: $(PROGRSX) 51 | @echo "cd system" > cp.cmd 52 | @echo "delete basic.tsk" >> cp.cmd 53 | @echo "import basic.tsk basic.tsk /c" >> cp.cmd 54 | @echo "dir" >> cp.cmd 55 | @echo "quit" >> cp.cmd 56 | $(VOL180) /dev/fd0 < cp.cmd 57 | @rm cp.cmd 58 | 59 | clean: 60 | rm -f *.rel *.prn *.sym *.map core *.bin $(PROGRSX) $(PROGCPM) *~ *.\$$\$$\$$ 61 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BASIC-11 for the Z80 2 | 3 | This is the good ol' BASIC-11 (not BASIC-PLUS) ported to the Zilog Z80 CPU. 4 | The port is accurate enough (down to the format of the tokenized program) 5 | so that programs "compiled" under e.g. RT-11 could be loaded and executed. 6 | 7 | The included Makefile is intended to be used from within the RSX180 build 8 | tree, and produces both CP/M and RSX180 executables. 9 | 10 | -------------------------------------------------------------------------------- /ast.inc: -------------------------------------------------------------------------------- 1 | ; AST control/event block structure 2 | 3 | A.LNK equ 0 ; link to next item in list (2 bytes) 4 | A.SIZ equ A.LNK + 2 ; size of data area (1 byte) 5 | A.TYP equ A.SIZ + 1 ; event type (1 byte) 6 | A.ADDR equ A.TYP + 1 ; AST entry address (2 bytes) 7 | A.DAT equ A.ADDR + 2 ; start of data area (variable length) 8 | 9 | ; AST control block size = AST event header size 10 | 11 | ACBSZ equ A.DAT 12 | 13 | ; AST types 14 | 15 | AST.IO equ 1 ; I/O completion 16 | AST.UC equ 2 ; unsolicited char from attached terminal 17 | AST.RD equ 3 ; data received 18 | AST.CK equ 4 ; clock (mark time) 19 | AST.ST equ 5 ; status (from offspring) 20 | AST.AB equ 6 ; abort/exit 21 | AST.CL equ 7 ; command line (CLIs only) 22 | 23 | -------------------------------------------------------------------------------- /bascli.mac: -------------------------------------------------------------------------------- 1 | TITLE BASIC-11 interpreter 2 | SUBTTL User functions 3 | 4 | .Z80 5 | 6 | ; Z80 port by Hector Peraza, 2016-2020 7 | 8 | include BASDEF.INC 9 | include BASTKN.INC 10 | 11 | public FTABI 12 | public EOFNTR,UACTST,XEQNTR,RDYNTR,BYENTR,RETNTR 13 | 14 | ;----------------------------------------------------------------------- 15 | 16 | cseg 17 | 18 | FTABI: dw FTBL ; no support for user routines yet. 19 | FTBL: dw 0 20 | 21 | UACTST: 22 | EOFNTR: ; called from the LINGET routine on EOF from terminal 23 | RDYNTR: ; called at the READY message 24 | BYENTR: ; called from the BYE command 25 | RETNTR: ; called from the RETURN statement 26 | XEQNTR: ; called before the execution of each statement 27 | ret 28 | 29 | END 30 | -------------------------------------------------------------------------------- /basdat.mac: -------------------------------------------------------------------------------- 1 | TITLE BASIC-11 Interpreter 2 | SUBTTL Work data areas 3 | 4 | .Z80 5 | 6 | ; Z80 port by Hector Peraza, 2016-2020 7 | 8 | public SYMBOL,LINTAB,DEFTAB,LIMIT,PDL,STK,PDSIZE,ARRAYS 9 | public HIFREE,LOFREE,HIFSAV,CODE,LINE,VARSAV,SS1SAV,SS2SAV 10 | public CPSAVE,GSBCTR,COLUMN,CLMNTT,FAC1,FAC2,CLCMOD 11 | public BCSAVE,DESAVE,HLSAVE,IXSAVE,IYSAVE,T1,T2,T3,T4,T5 12 | public RND1,RND2,RNDCT,LOSTR,HISTR,COMN,HILINO,WIDTH 13 | public IDEV,ODEV,FILSIZ,MODE,RECSIZ,SEQFIL,BUFCHN,EDITLN 14 | public CHNFLG,SYSBUF,DATPTR,CLKPTR,CCFLG,COLTAB,FNBSZ 15 | public SS1MAX,SS2MAX,PROGNAM 16 | 17 | extrn HEAD2,HEAD3 18 | 19 | public $MEMRY,BASDAT 20 | 21 | dseg 22 | 23 | FNBSZ: ds 2 ; size of filename block 24 | DATPTR: dw HEAD2-3 ; used by DAT$ 25 | CLKPTR: dw HEAD3-3 ; used by CLK$ 26 | 27 | $MEMRY: ds 2 ; pointer to start of free memory, set by linker 28 | 29 | BASDAT equ $ ; start of data area, will be cleared on startup 30 | 31 | SYMBOL: ds 2 ; start address of symbol table 32 | LINTAB: ds 2 ; start address of line numbers table 33 | DEFTAB: ds 2 ; start address of user FN table 34 | LIMIT: ds 2 ; memory top address 35 | PDL: ds 2 ; list of GOSUB return addresses (init: memtop - 50) 36 | STK: ds 2 ; initial SP 37 | PDSIZE: ds 2 ; low limit of stack (init: initial SP - 200) 38 | ARRAYS: ds 2 ; address of highest word of arrays (init: memtop - 50) 39 | HIFREE: ds 2 ; address of highest free word 40 | LOFREE: ds 2 ; address of lowest free word 41 | HIFSAV: ds 2 ; 42 | CODE: ds 2 ; address of tokenized code (pointer to program text) 43 | VARSAV: ds 2 ; current var address 44 | SS1SAV: ds 2 ; 1st array index 45 | SS2SAV: ds 2 ; 2nd array index 46 | SS1MAX: ds 2 ; max 1st array index 47 | SS2MAX: ds 2 ; max 2nd array index 48 | CPSAVE: ds 2 ; 49 | GSBCTR: ds 2 ; current GOSUB depth 50 | COLUMN: ds 2 ; address of ODEV column value 51 | CLMNTT: ds 1 ; TT output line length (count) 52 | FAC1: ds 2 ; FP accum (sign, exp, lo-mantissa) 53 | FAC2: ds 2 ; FP accum (hi-manitssa), or integer if FAC1 is 0 54 | CLCMOD: ds 2 ; 0 = string, 1 = real, -1 = integer 55 | 56 | BCSAVE: ds 2 ; saved registers during polish mode 57 | DESAVE: ds 2 ; 58 | HLSAVE: ds 2 ; 59 | IXSAVE: ds 2 ; 60 | IYSAVE: ds 2 ; 61 | 62 | T1: ds 2 ; temporary variables 63 | T2: ds 2 ; 64 | T3: ds 2 ; 65 | T4: ds 2 ; 66 | T5: ds 2 ; 67 | 68 | RND1: ds 2 ; used by RND 69 | RND2: ds 2 ; used by RND 70 | RNDCT: ds 2 ; RANDOMIZE seed 71 | 72 | LOSTR: ds 2 ; low limit of string storage 73 | HISTR: ds 2 ; high limit of string storage 74 | 75 | COMN: ds 1 ; number of COMMON variables 76 | 77 | HILINO: ds 2 ; highest line number 78 | WIDTH: ds 1 ; TT line width 79 | 80 | IDEV: ds 2 ; input channel descriptor address 81 | ODEV: ds 2 ; output channel descriptor address 82 | 83 | FILSIZ: ds 2 ; FILESIZE option 84 | MODE: ds 2 ; MODE option 85 | RECSIZ: ds 2 ; RECORDSIZE option 86 | 87 | SEQFIL: ds 2 ; channel #1 flags 88 | ds 2 ; channel #1 buffer descr address 89 | ds 2 ; channel #2 flags 90 | ds 2 ; channel #2 buffer descr address 91 | ds 2 ; channel #3 flags 92 | ds 2 ; channel #3 buffer descr address 93 | ds 2 ; channel #4 flags 94 | ds 2 ; channel #4 buffer descr address 95 | ds 2 ; channel #5 flags 96 | ds 2 ; channel #5 buffer descr address 97 | ds 2 ; channel #6 flags 98 | ds 2 ; channel #6 buffer descr address 99 | ds 2 ; channel #7 flags 100 | ds 2 ; channel #7 buffer descr address 101 | ds 2 ; channel #8 flags 102 | ds 2 ; channel #8 buffer descr address 103 | ds 2 ; channel #9 flags 104 | ds 2 ; channel #9 buffer descr address 105 | ds 2 ; channel #10 flags 106 | ds 2 ; channel #10 buffer descr address 107 | ds 2 ; channel #11 flags 108 | ds 2 ; channel #11 buffer descr address 109 | ds 2 ; channel #12 flags 110 | ds 2 ; channel #12 buffer descr address 111 | ds 2 ; system channel flags 112 | ds 2 ; system channel buffer descr address 113 | 114 | SYSBUF: ds 2 ; channel #13 buffer descr address 115 | 116 | BUFCHN: ds 2 ; linked list of free file I/O buffers 117 | EDITLN: ds 2 ; 118 | CHNFLG: ds 1 ; CHAIN flag 119 | 120 | CCFLG: ds 2 ; ^C flags 121 | 122 | COLTAB: ds 1 ; used by PRINT #1 123 | ds 1 ; used by PRINT #2 124 | ds 1 ; used by PRINT #3 125 | ds 1 ; used by PRINT #4 126 | ds 1 ; used by PRINT #5 127 | ds 1 ; used by PRINT #6 128 | ds 1 ; used by PRINT #7 129 | ds 1 ; used by PRINT #8 130 | ds 1 ; used by PRINT #9 131 | ds 1 ; used by PRINT #10 132 | ds 1 ; used by PRINT #11 133 | ds 1 ; used by PRINT #12 134 | 135 | PROGNAM:ds 9 ; program file in ASCII (9 chars) 136 | LINE: ds 134 ; input line buffer, 134 chars max 137 | 138 | end 139 | -------------------------------------------------------------------------------- /basdef.inc: -------------------------------------------------------------------------------- 1 | ; Define the following global to include full error message strings. 2 | ; Undefine it to generate short (three letters) error messages. 3 | 4 | LMSG equ 1 5 | 6 | ; Define the following global to include support for the CALL command. 7 | 8 | ;CALLS equ 1 ; not done, anyway 9 | 10 | ; External references to work data area 11 | 12 | extrn SYMBOL,LINTAB,DEFTAB,LIMIT,PDL,STK,PDSIZE,ARRAYS 13 | extrn HIFREE,LOFREE,HIFSAV,CODE,LINE,VARSAV,SS1SAV,SS2SAV 14 | extrn CPSAVE,GSBCTR,COLUMN,CLMNTT,FAC1,FAC2,CLCMOD 15 | extrn BCSAVE,DESAVE,HLSAVE,IXSAVE,IYSAVE,T1,T2,T3,T4,T5 16 | extrn RND1,RND2,RNDCT,LOSTR,HISTR,COMN,HILINO,WIDTH 17 | extrn IDEV,ODEV,FILSIZ,MODE,RECSIZ,SEQFIL,BUFCHN,EDITLN 18 | extrn CHNFLG,SYSBUF,DATPTR,CLKPTR,CCFLG,COLTAB,FNBSZ 19 | extrn SS1MAX,SS2MAX,PROGNAM,BASDAT 20 | 21 | ; File I/O buffer definitions 22 | 23 | BUFSZ equ 512 ; file I/O buffer size 24 | 25 | ; Indexes into buffer descriptor 26 | 27 | BUFAD equ 0 ; address of I/O buffer 28 | BUF2 equ BUFAD + 2 ; address of second buffer for DOUBLEBUF files 29 | BLKNO equ BUF2 + 2 ; current block I/O number 30 | BUFEND equ BLKNO + 2 ; address of end byte in I/O buffer 31 | BUFPTR equ BUFEND + 2 ; current byte pointer 32 | BFDB equ BUFPTR + 2 ; address of OS-dependent file descriptor block 33 | 34 | BDSZ equ BFDB + 2 ; size of buffer descriptor 35 | 36 | ; LUN assignment 37 | 38 | LUNTI equ 1 ; terminal 39 | LUNSY equ 2 ; and above for file operations 40 | 41 | -------------------------------------------------------------------------------- /basinit.mac: -------------------------------------------------------------------------------- 1 | TITLE BASIC-11 interpreter for Z80 2 | SUBTTL Initialization Routines 3 | 4 | .Z80 5 | 6 | ; Hector Peraza, 2016-2020 7 | 8 | include BASDEF.INC 9 | include BASTKN.INC 10 | 11 | CR equ 0Dh 12 | LF equ 0Ah 13 | 14 | public INIT,SYSIOB 15 | 16 | extrn $INIT,DATIM,MSG,NAMSET,ERRMSG,ODEVTT,CPHLDE 17 | extrn $EXIT,SCRATCH,$MEMRY,CLRFNB,HEAD3 18 | 19 | ;----------------------------------------------------------------------- 20 | 21 | ; This module MUST be linked LAST. 22 | 23 | cseg 24 | 25 | SYSIOB equ $ ; this area will be used as I/O buffer 26 | ; for the system channel when loading 27 | ; and saving programs 28 | 29 | INIT: call $INIT ; returns top of memory in HL 30 | ex de,hl ; DE = memtop 31 | ld hl,($MEMRY) 32 | inc hl 33 | res 0,l ; word-align, or else COMPILE will fail 34 | ld bc,256 35 | add hl,bc 36 | ld sp,hl ; place stack in low memory 37 | push de ; push memtop 38 | 39 | ; TODO: parse command line for a possible filename? 40 | 41 | pop hl ; get memtop into HL 42 | ld e,l ; and DE 43 | ld d,h 44 | ld bc,BASDAT ; begin of data area 45 | or a 46 | sbc hl,bc ; get size of free memory into HL 47 | ini1: xor a 48 | ld (bc),a ; clear all available memory 49 | inc bc ; including stack and data areas 50 | dec hl 51 | ld a,h 52 | or l 53 | jr nz,ini1 54 | ld (LIMIT),de ; save memtop into LIMIT 55 | 56 | ld hl,0 57 | add hl,sp 58 | ld (STK),hl ; save initial stack pointer 59 | ex de,hl 60 | ld hl,-150 61 | add hl,de 62 | ld (PDSIZE),hl 63 | 64 | ex de,hl ; buffer descriptor of system channel 65 | ld (SYSBUF),hl ; is above stack on low memory 66 | push hl 67 | pop iy 68 | ld de,SYSIOB 69 | ld (iy+BUFAD),e ; set I/O buffer address of system channel 70 | ld (iy+BUFAD+1),d 71 | ld (iy+BUF2),e ; just in case, although system channel 72 | ld (iy+BUF2+1),d ; never uses double-buffering 73 | ld de,BDSZ 74 | add hl,de ; file descriptor follows 75 | ld (iy+BFDB),l 76 | ld (iy+BFDB+1),h 77 | ld de,(FNBSZ) 78 | add hl,de ; point past end of system buffer descriptor 79 | inc hl ; word 80 | res 0,l ; align 81 | ld (CODE),hl ; set start of program code 82 | call CLRFNB ; clear FDB of system channel 83 | 84 | ld hl,(LIMIT) 85 | ld de,-40 ; GOSUB max depth = 20 86 | add hl,de 87 | ld (PDL),hl 88 | ld (ARRAYS),hl 89 | ld de,-1000 ; at least 1000 bytes 90 | add hl,de 91 | ld de,(CODE) 92 | call CPHLDE 93 | jr nc,nomem ; not enough memory, exit 94 | 95 | call ODEVTT ; set output to terminal 96 | ld a,72 97 | ld (WIDTH),a ; set terminal line width to 72. 98 | 99 | ld hl,0010h ; setup RST 10h (RST 2) trap vector 100 | ld (hl),0C3h 101 | inc hl 102 | ld de,ERRMSG 103 | ld (hl),e 104 | inc hl 105 | ld (hl),d 106 | 107 | ld c,0 108 | call NAMSET ; set program filename to 'NONAME' 109 | call DATIM 110 | ld ix,HEAD3 111 | ld a,(ix+7) ; seconds 112 | rlca 113 | rlca 114 | rlca 115 | xor (ix+6) 116 | ld e,a 117 | ld a,(ix+4) ; minutes 118 | rlca 119 | rlca 120 | rlca 121 | xor (ix+3) 122 | ld d,a 123 | ld hl,(RNDCT) 124 | add hl,de 125 | ld (RNDCT),hl ; initialize the RANDOMIZE seed 126 | jp SCRATCH ; run the interpreter 127 | 128 | ; not enough memory, print error message and exit 129 | 130 | nomem: call MSG 131 | db CR,LF,'NOT ENOUGH ROOM FOR BASIC',CR,LF,0 132 | jp $EXIT ; exit to system 133 | 134 | ;----------------------------------------------------------------------- 135 | 136 | org INIT + BUFSZ 137 | 138 | db 0 139 | 140 | END 141 | -------------------------------------------------------------------------------- /bastkn.inc: -------------------------------------------------------------------------------- 1 | ; BASIC-11 tokens 2 | 3 | T.PLS equ 0A5h ; '+' 4 | T.MIN equ 0A6h ; '-' 5 | T.UMIN equ 0A2h ; unary minus 6 | T.MUL equ 0A3h ; '*' 7 | T.DIV equ 0A4h ; '/' 8 | T.PWR equ 0A1h ; '^' 9 | T.LPAR equ 0B4h ; '(' 10 | T.RPAR equ 0A9h ; ')' 11 | T.EOL equ 080h ; '\' 12 | T.CONC equ 0A0h ; '&' 13 | T.SEM equ 0A8h ; ';' 14 | T.COM equ 0ADh ; ',' 15 | T.LE equ 0AEh ; '<=' 16 | T.GE equ 0AFh ; '>=' 17 | T.NE equ 0B0h ; '<>' 18 | T.LT equ 0B1h ; '<' 19 | T.GT equ 0B2h ; '>' 20 | T.EQ equ 0B3h ; '=' 21 | T.DBLQ equ 0B5h ; '"' 22 | T.SNGQ equ 0B6h ; "'" 23 | T.COLN equ 0B7h ; ':' 24 | T.FILN equ 0B8h ; '#' 25 | T.TERM equ 0A7h ; end of expression on stack 26 | 27 | T.IFE equ 08Bh ; 'IF END #' 28 | T.LET equ 088h ; 'LET ' 29 | T.IF equ 08Ah ; 'IF ' 30 | T.GOTO equ 08Fh ; 'GO TO ' 31 | T.ON equ 090h ; 'ON ' 32 | T.FINP equ 0BCh ; ' FOR INPUT' 33 | T.FOUT equ 0BAh ; ' FOR OUTPUT' 34 | T.FOR equ 089h ; 'FOR ' 35 | T.TO equ 0AAh ; ' TO ' 36 | T.NEXT equ 08Ch ; 'NEXT ' 37 | T.THEN equ 0ACh ; ' THEN ' 38 | T.STEP equ 0ABh ; ' STEP ' 39 | T.GSUB equ 08Eh ; 'GOSUB ' 40 | T.RET equ 08Dh ; 'RETURN' 41 | T.INP equ 091h ; 'INPUT ' 42 | T.LINP equ 092h ; 'LINPUT ' 43 | T.PRNT equ 093h ; 'PRINT ' 44 | T.USNG equ 0C1h ; 'USING ' 45 | T.REM equ 083h ; 'REM' 46 | T.DEF equ 084h ; 'DEF ' 47 | T.READ equ 094h ; 'READ ' 48 | T.DATA equ 085h ; 'DATA ' 49 | T.CALL equ 086h ; 'CALL ' 50 | T.FN equ 0B9h ; 'FN' 51 | T.PI equ 0D8h ; 'PI' 52 | T.SYS equ 0C4h ; 'SYS(' 53 | T.RCO equ 0C5h ; 'RCTRLO' 54 | T.ABO equ 0C6h ; 'ABORT(' 55 | T.TTYS equ 0C7h ; 'TTYSET(' 56 | T.CC equ 0C8h ; 'CTRLC' 57 | T.RCC equ 0C9h ; 'RCTRLC' 58 | T.RNDP equ 0CAh ; 'RND(' 59 | T.RND equ 0CBh ; 'RND' 60 | T.SIN equ 0DCh ; 'SIN(' 61 | T.COS equ 0DDh ; 'COS(' 62 | T.SQR equ 0DEh ; 'SQR(' 63 | T.ATN equ 0DFh ; 'ATN(' 64 | T.EXP equ 0E0h ; 'EXP(' 65 | T.LOG equ 0E1h ; 'LOG(' 66 | T.LG10 equ 0E2h ; 'LOG10(' 67 | T.ABS equ 0CCh ; 'ABS(' 68 | T.INT equ 0D9h ; 'INT(' 69 | T.SGN equ 0CDh ; 'SGN(' 70 | T.TAB equ 0C3h ; 'TAB(' 71 | T.BIN equ 0CEh ; 'BIN(' 72 | T.OCT equ 0CFh ; 'OCT(' 73 | T.CHR equ 0D2h ; 'CHR$(' 74 | T.LEN equ 0D0h ; 'LEN(' 75 | T.ASC equ 0D1h ; 'ASC(' 76 | T.POS equ 0D3h ; 'POS(' 77 | T.SEG equ 0D4h ; 'SEG$(' 78 | T.VAL equ 0D5h ; 'VAL(' 79 | T.TRM equ 0D6h ; 'TRM$(' 80 | T.DAT equ 0DAh ; 'DAT$' 81 | T.CLK equ 0DBh ; 'CLK$' 82 | T.STR equ 0D7h ; 'STR$(' 83 | T.OPEN equ 09Ah ; 'OPEN ' 84 | T.CLSE equ 09Bh ; 'CLOSE ' 85 | T.CHN equ 09Ch ; 'CHAIN ' 86 | T.OVL equ 09Dh ; 'OVERLAY ' 87 | T.ASF equ 0BBh ; ' AS FILE ' 88 | T.KILL equ 09Eh ; 'KILL ' 89 | T.NAME equ 09Fh ; 'NAME ' 90 | T.RCSZ equ 0BEh ; ' RECORDSIZE ' 91 | T.FSZ equ 0BFh ; ' FILESIZE ' 92 | T.MODE equ 0C0h ; ' MODE ' 93 | T.DBUF equ 0BDh ; ' DOUBLE BUF' 94 | T.LINE equ 0C2h ; ' LINE ' 95 | T.DIM equ 081h ; 'DIM ' 96 | T.COMN equ 082h ; 'COMMON ' 97 | T.RDMZ equ 097h ; 'RANDOMIZE' 98 | T.RES equ 095h ; 'RESTORE ' 99 | T.RST equ 096h ; 'RESET ' 100 | T.STOP equ 087h ; 'STOP' 101 | T.END equ 098h ; 'END' 102 | T.EOF equ 099h ; end of program 103 | T.TEXT equ 0FAh ; text follows 104 | 105 | T.UNS equ 092h ; 'UNSAVE' 106 | T.REN equ 089h ; 'RENAME' 107 | T.NEW equ 08Ah ; 'NEW' 108 | T.RPLC equ 091h ; 'REPLACE' 109 | T.DEL equ 087h ; 'DEL' 110 | T.SUB equ 088h ; 'SUB' 111 | T.LNH equ 086h ; 'LISTNH' 112 | T.RNH equ 08Eh ; 'RUNNH' 113 | T.LIST equ 085h ; 'LIST' 114 | T.RUN equ 08Dh ; 'RUN' 115 | T.SAVE equ 08Fh ; 'SAVE' 116 | T.CMPL equ 090h ; 'COMPILE' 117 | T.APND equ 08Bh ; 'APPEND' 118 | T.OLD equ 08Ch ; 'OLD' 119 | T.SCR equ 081h ; 'SCR' 120 | T.CLR equ 080h ; 'CLEAR' 121 | T.LENG equ 082h ; 'LENGTH' 122 | T.BYE equ 084h ; 'BYE' 123 | T.RSEQ equ 083h ; 'RESEQ' 124 | T.CAT equ 093h ; 'CAT' 125 | T.CMD equ 0E3h ; direct statement follows 126 | 127 | T.LFLT equ 0FCh ; float value follows 128 | T.LBYT equ 0FDh ; integer byte value follows 129 | T.LINT equ 0FEh ; integer word value follows 130 | -------------------------------------------------------------------------------- /bin/basic.com: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hperaza/BASIC-11-Z80/64006914a8810ca96468ba8863dbb608db0c5c69/bin/basic.com -------------------------------------------------------------------------------- /bin/basic.tsk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hperaza/BASIC-11-Z80/64006914a8810ca96468ba8863dbb608db0c5c69/bin/basic.tsk -------------------------------------------------------------------------------- /docs/if-note.txt: -------------------------------------------------------------------------------- 1 | 10 IF A>1 THEN 20 \ B=1 --- B=1 executed if A<=1 (ELSE-like) 2 | 10 IF A>1 GO TO 20 \ B=1 --- B=1 executed if A<=1 (ELSE-like) 3 | 10 IF A>1 THEN C=1 \ B=1 --- B=1 NOT executed if A<=1 (both C=1 and B=1 4 | are executed if A>1) 5 | 10 IF A>1 THEN GO TO 20 \ B=1 --- as above (NOT executed) 6 | 7 | Thus, ELSE-effect only for THEN # or GO TO # 8 | 9 | This allows easy conversion of AND and OR: 10 | 11 | IF A=1 AND B=2 THEN ... 12 | 13 | becomes 14 | 15 | IF A=1 THEN IF B=2 THEN ... 16 | 17 | Likewise 18 | 19 | IF A=1 OR B=2 THEN ... 20 | 21 | becomes 22 | 23 | IF A=1 THEN n1 \ IF B=2 THEN n1 24 | GOTO n2 25 | n1 ... 26 | n2 27 | -------------------------------------------------------------------------------- /errors.inc: -------------------------------------------------------------------------------- 1 | ; System error codes 2 | 3 | E.OK equ 0 ; No error 4 | E.EOF equ -1 ; End of file 5 | E.FNF equ -2 ; File not found 6 | E.DNF equ -3 ; Directory not found 7 | E.NODIR equ -4 ; Not a directory 8 | E.BADF equ -5 ; Bad file specification 9 | E.DSKF equ -6 ; Disk full 10 | E.IDXF equ -7 ; Index file full 11 | E.IDXE equ -8 ; Index file error 12 | E.BADOP equ -9 ; Invalid operation 13 | E.CHOPN equ -10 ; Channel already in use 14 | E.IO equ -11 ; Channel I/O error 15 | E.PERM equ -12 ; Access denied 16 | E.INV equ -13 ; Invalid value 17 | E.LUN equ -14 ; Invalid LUN 18 | E.NOBUF equ -15 ; Out of disk buffers 19 | E.DEVNM equ -16 ; Device not mounted 20 | E.DEVAM equ -17 ; Device already mounted 21 | E.DMOP equ -18 ; Dismount in progress 22 | E.OFL equ -19 ; Unit offline 23 | E.BADVT equ -20 ; Invalid volume type 24 | E.UNA equ -21 ; Reading unallocated block (unwritten data) 25 | E.FLCK equ -22 ; File access is locked 26 | E.NODEV equ -23 ; No such device 27 | E.EXIST equ -24 ; File exists 28 | E.DNE equ -25 ; Directory not empty 29 | E.VLIM equ -26 ; File version limit reached 30 | E.BADFN equ -27 ; Invalid system call 31 | E.BADTH equ -28 ; Invalid task header 32 | E.TCKS equ -29 ; Task image checksum error 33 | E.BADTF equ -30 ; Invalid or corrupt task image file 34 | E.TNF equ -31 ; Task not found 35 | E.TNU equ -32 ; Task name in use 36 | E.FNC equ -33 ; File not contiguous 37 | E.NCSPC equ -34 ; No contiguous space on device 38 | E.NOMEM equ -35 ; Not enough room 39 | E.PEND equ -36 ; I/O request pending 40 | E.TRUN equ -37 ; Task already running 41 | E.TSTP equ -38 ; Task already stopped 42 | E.TDLY equ -39 ; Task already delayed 43 | E.TFIX equ -40 ; Task already fixed 44 | E.TNFIX equ -41 ; Task not fixed 45 | E.TACT equ -42 ; Task active 46 | E.TNAC equ -43 ; Task not active 47 | E.TNIU equ -44 ; Task name in use 48 | E.TABO equ -45 ; Task abort in progress 49 | E.FAIL equ -46 ; Operation failed 50 | E.ABOP equ -47 ; Operation aborted 51 | E.TMO equ -48 ; Operation timed out 52 | E.PRIV equ -49 ; Privileged command 53 | E.PBIG equ -50 ; Program too big 54 | E.QEMP equ -51 ; Queue empty 55 | E.BADFL equ -52 ; Invalid flag number 56 | E.PBSY equ -53 ; Partition busy 57 | E.PNF equ -54 ; Partition not found 58 | E.SSNF equ -55 ; Session not found 59 | E.SSNA equ -56 ; Session not active 60 | E.CLNF equ -57 ;- CLI not found 61 | E.DMOI equ -58 ;- Dismount initiated 62 | E.NLI equ -59 ;- Not logged in 63 | E.ULI equ -60 ;- Already (Other user) logged in 64 | 65 | ; Task exit status codes (lo-byte, hi-byte is reserved for user codes) 66 | 67 | EX.WRN equ 0 ; Warning 68 | EX.SUC equ 1 ; Success 69 | EX.ERR equ 2 ; Error 70 | EX.SEV equ 4 ; Severe 71 | 72 | -------------------------------------------------------------------------------- /fcb.inc: -------------------------------------------------------------------------------- 1 | ; FCB structure offsets 2 | 3 | F.LNK equ 0 ; link to next FCB in list (2 bytes) 4 | F.ATTR equ F.LNK + 2 ; file attributes and flags (1 byte) 5 | F.DEV equ F.ATTR + 1 ; device name (2 characters) 6 | F.UNIT equ F.DEV + 2 ; device unit (1 byte) 7 | F.DIR equ F.UNIT + 1 ; directory name (9 characters) 8 | F.NAME equ F.DIR + 9 ; file name (9 characters) 9 | F.EXT equ F.NAME + 9 ; file ext (3 characters) 10 | F.VER equ F.EXT + 3 ; file version (2 bytes) 11 | F.USER equ F.VER + 2 ; user code (1 byte) 12 | F.GROUP equ F.USER + 1 ; group code (1 byte) 13 | F.PROT equ F.GROUP + 1 ; protection bits (2 bytes) 14 | F.LCNT equ F.PROT + 2 ; link count (2 bytes) 15 | F.SEQNO equ F.LCNT + 2 ; sequence number (2 bytes) 16 | F.INODE equ F.SEQNO + 2 ; index file entry number (2 bytes) 17 | F.NALOC equ F.INODE + 2 ; total data blocks allocated (3 bytes) 18 | F.NUSED equ F.NALOC + 3 ; data blocks actually used (3 bytes) 19 | F.LBCNT equ F.NUSED + 3 ; last block byte count (2 bytes) 20 | F.BMAP equ F.LBCNT + 2 ; block map (6*3 bytes) 21 | F.CALBN equ F.BMAP + 6*3 ; cached logical alloc block number (3 bytes) 22 | F.CAVBN equ F.CALBN + 3 ; cached virtual alloc block number (2 bytes) 23 | F.REFS equ F.CAVBN + 2 ; reference count (2 bytes) 24 | 25 | ; Fields present in fileinfo and FDB structures, but not in FCB 26 | 27 | F.WAT equ F.LNK + 0 ; field bit for IO.WAT function (1 byte) 28 | F.WLDC equ F.WAT + 1 ; wildcards in filespec (1 byte) 29 | F.TCRE equ F.CALBN + 0 ; created timestamp (7 bytes) 30 | F.TMOD equ F.TCRE + 7 ; last modified timestamp (7 bytes) 31 | 32 | ; F.ATTR flag bits (for both FCB and index file entries unless otherwise noted) 33 | 34 | FA.DIR equ 80h ; file is a directory 35 | FA.FILE equ 01h ; file is a regular file 36 | FA.CTG equ 08h ; file is contiguous 37 | FA.LCK equ 10h ; file is locked 38 | FA.RD equ 02h ; file is open for read (FCB only) 39 | FA.WR equ 04h ; file is open for write (FCB only) 40 | FA.SHR equ 20h ; file is open in shared mode (FCB only) 41 | FA.MODF equ 40h ; file has been modified (FCB only) 42 | 43 | ; F.WAT field bit masks 44 | 45 | FA.USER equ 01h ; set F.USER 46 | FA.GRP equ 02h ; set F.GROUP 47 | FA.PROT equ 04h ; set F.PROT 48 | FA.TCRE equ 10h ; set IE.TCRE 49 | FA.TMOD equ 20h ; set IE.TMOD 50 | 51 | ; PFN filespec parsing result bits 52 | 53 | FN.DEV equ 01h ; device name specified 54 | FN.DIR equ 02h ; directory specified 55 | FN.NAME equ 04h ; file name specified 56 | FN.EXT equ 08h ; extension specified 57 | FN.VER equ 10h ; version specified 58 | 59 | ; File protection bit masks 60 | 61 | FP.R equ 08h ; read 62 | FP.W equ 04h ; write 63 | FP.E equ 02h ; execute (not used) 64 | FP.D equ 01h ; delete 65 | 66 | ; Structure sizes 67 | 68 | FCBSZ equ F.REFS + 2 ; FCB size 69 | FDBSZ equ F.PROT + 2 ; size of descriptor used by file open/create, etc. 70 | FNSZ equ F.VER + 2 ; size of filespec part, used by parsefn 71 | FINFSZ equ F.TMOD + 7 ; size of fileinfo structure 72 | 73 | ; Directory entry layout 74 | 75 | DE.INDX equ 0 ; index file entry (inode) number (2 bytes) 76 | DE.NAME equ DE.INDX + 2 ; file name (9 characters) 77 | DE.EXT equ DE.NAME + 9 ; file externsion (3 characters) 78 | DE.VER equ DE.EXT + 3 ; file version (2 bytes) 79 | 80 | DESZ equ DE.VER + 2 ; directory entry size 81 | 82 | ; Index file entry (inode) layout 83 | 84 | IE.LCNT equ 0 ; link count (2 bytes) 85 | IE.ATTR equ IE.LCNT + 2 ; file attributes (1 byte) 86 | IE.CLF equ IE.ATTR + 1 ; cluster factor (1 byte) 87 | IE.SEQN equ IE.CLF + 1 ; file sequence number (2 bytes) 88 | IE.USER equ IE.SEQN + 2 ; user code (1 byte) 89 | IE.GRP equ IE.USER + 1 ; group code (1 byte) 90 | IE.ALOC equ IE.GRP + 1 ; total data blocks allocated (3 bytes) 91 | IE.USED equ IE.ALOC + 3 ; total data blocks used (3 bytes) 92 | IE.LBCN equ IE.USED + 3 ; last block byte count (2 bytes) 93 | IE.TCRE equ IE.LBCN + 2 ; created timestamp (7 bytes) 94 | IE.TMOD equ IE.TCRE + 7 ; last modified timestamp (7 bytes) 95 | IE.PROT equ IE.TMOD + 7 ; protection bits (2 bytes) 96 | IE.BMAP equ IE.PROT + 2 ; block map (6*3 bytes) 97 | IE.NAME equ IE.BMAP + 6*3 ; original file name (9 characters) 98 | IE.EXT equ IE.NAME + 9 ; original file extension (3 characters) 99 | IE.VERS equ IE.EXT + 3 ; original file version (2 bytes) 100 | 101 | IESZ equ IE.VERS + 2 ; index file entry (inode) size (64 bytes) 102 | 103 | -------------------------------------------------------------------------------- /programs/Makefile: -------------------------------------------------------------------------------- 1 | DSKUTL = ../../../Tools/linux/vol180/vol180 2 | 3 | all: update 4 | 5 | # Update a floppy with the programs on this directory 6 | update: 7 | @echo "cd basic" > copy.cmd 8 | @for i in *.bas *.bac; do \ 9 | echo "delete "`basename $$i` >> copy.cmd ; \ 10 | echo "import "$$i" "`basename $$i` >> copy.cmd ; \ 11 | done 12 | @echo "dir" >> copy.cmd 13 | @echo "quit" >> copy.cmd 14 | $(DSKUTL) /dev/fd0 < copy.cmd 15 | @rm copy.cmd 16 | -------------------------------------------------------------------------------- /programs/acey.bas: -------------------------------------------------------------------------------- 1 | 10 REM *** GAME OF ACEY-DUCEY WRITTEN BY BILL PALMBY 2 | 20 REM *** ADLAI STEVENSON HIGH SCHOOL, PRAIRE VIEW, ILL 3 | 30 REM *** TRANSLATED TO RSTS/E BY DAVE AHL, DIGITAL 4 | 100 RANDOMIZE 5 | 101 PRINT "ACEY-DUCEY IS PLAYED IN THE FOLLOWING MANNER:" 6 | 102 PRINT "THE DEALER (COMPUTER) DEALS TWO CARDS FACE UP." 7 | 103 PRINT "YOU HAVE THE OPTION TO BET OR NOT TO BET DEPENDING" 8 | 104 PRINT "ON WHETHER OR NOT YOU FEEL THE NEXT CARD WILL HAVE" 9 | 105 PRINT "A VALUE BETWEEN THE FIRST TWO." 10 | 106 PRINT "IF YOU DO NOT WANT TO BET, INPUT A 0." 11 | 110 PRINT 12 | 160 N=100 \ Q=100 13 | 190 PRINT "YOU NOW HAVE",Q,"DOLLARS." 14 | 195 PRINT 15 | 200 GO TO 260 16 | 210 Q=Q+M 17 | 220 GO TO 190 18 | 240 Q=Q-M 19 | 250 GO TO 190 20 | 260 PRINT "HERE ARE YOUR NEXT TWO CARDS..." 21 | 270 A=INT(14*RND(5))+2 22 | 280 IF A<2 THEN 270 23 | 290 IF A>14 THEN 270 24 | 300 B=INT(14*RND(6))+2 25 | 310 IF B<2 THEN 300 26 | 320 IF B>14 THEN 300 27 | 330 IF A>=B THEN 270 28 | 350 IF A<11 THEN 400 29 | 360 IF A=11 THEN 420 30 | 370 IF A=12 THEN 440 31 | 380 IF A=13 THEN 460 32 | 390 IF A=14 THEN 480 33 | 400 PRINT A 34 | 410 GO TO 500 35 | 420 PRINT "JACK" 36 | 430 GO TO 500 37 | 440 PRINT "QUEEN" 38 | 450 GO TO 500 39 | 460 PRINT "KING" 40 | 470 GO TO 500 41 | 480 PRINT "ACE" 42 | 500 IF B<11 THEN 550 43 | 510 IF B=11 THEN 570 44 | 520 IF B=12 THEN 590 45 | 530 IF B=13 THEN 610 46 | 540 IF B=14 THEN 630 47 | 550 PRINT B 48 | 560 GO TO 650 49 | 570 PRINT "JACK" 50 | 580 GO TO 650 51 | 590 PRINT "QUEEN" 52 | 600 GO TO 650 53 | 610 PRINT "KING" 54 | 620 GO TO 650 55 | 630 PRINT "ACE" 56 | 650 PRINT 57 | 660 PRINT "WHAT IS YOUR BET"; \ INPUT M 58 | 670 IF M<>0 THEN 680 59 | 675 PRINT "CHICKEN!!" \ PRINT 60 | 677 GO TO 260 61 | 680 IF M<=Q THEN 730 62 | 690 PRINT "SORRY, MY FRIEND, BUT YOU BET TOO MUCH" 63 | 700 PRINT "YOU HAVE ONLY",Q,"DOLLARS TO BET." 64 | 710 GO TO 650 65 | 730 C=INT(14*RND(7))+2 66 | 740 IF C<2 THEN 730 67 | 750 IF C>14 THEN 730 68 | 760 IF C<11 THEN 810 69 | 770 IF C=11 THEN 830 70 | 780 IF C=12 THEN 850 71 | 790 IF C=13 THEN 870 72 | 800 IF C=14 THEN 890 73 | 810 PRINT C 74 | 820 GO TO 910 75 | 830 PRINT "JACK" 76 | 840 GO TO 910 77 | 850 PRINT "QUEEN" 78 | 860 GO TO 910 79 | 870 PRINT "KING" 80 | 880 GO TO 910 81 | 890 PRINT "ACE" 82 | 910 IF C>A THEN 930 83 | 920 GO TO 970 84 | 930 IF C>=B THEN 970 85 | 950 PRINT "YOU WIN!!!" 86 | 960 GO TO 210 87 | 970 PRINT "SORRY, YOU LOSE." 88 | 980 IF MH THEN 55 \GOSUB 100 14 | 55 IF E=0GO TO 80 15 | 60 PRINT "MY MOVE IS ";\GOSUB 800 16 | 65 IF E=0GO TO 80 17 | 70 IF M<>H THEN 75 \PRINT ",";\GOSUB 800 18 | 75 IF E>0GO TO 35 19 | 80 PRINT \PRINT "GAME OVER" 20 | 85 D=B(6)-B(13)\IF D>=0 THEN 90 \PRINT "I WIN BY";-D"POINTS"\GO TO 20 21 | 90 N=N+1\IF D<>0 THEN 95 \PRINT "DRAWN GAME"\GO TO 20 22 | 95 PRINT "YOU WIN BY"D"POINTS"\GO TO 20 23 | 100 PRINT "AGAIN"; 24 | 110 INPUT M\IF M>=7 THEN 120 \IF M<=0 THEN 120 \M=M-1\GO TO 130 25 | 120 PRINT "ILLEGAL MOVE"\GO TO 100 26 | 130 IF B(M)=0GO TO 120 27 | 140 H=6\GOSUB 200 28 | 150 GO TO 500 29 | 200 K=M\GOSUB 600 30 | 205 E=0\IF K>=6 THEN 210 \K=K-7 31 | 210 C=C+1\IF C>=9 THEN 215 \F(N)=F(N)*6+K 32 | 215 FOR I=0 TO 5\IF B(I)<>0 THEN 230 33 | 220 NEXT I 34 | 225 RETURN 35 | 230 FOR I=7 TO 12\IF B(I)=0 THEN 235 \E=1\RETURN 36 | 235 NEXT I\RETURN 37 | 500 PRINT \PRINT " "; 38 | 505 FOR I=12 TO 7 STEP -1\GOSUB 580 39 | 510 NEXT I 40 | 515 PRINT \I=13\GOSUB 580 41 | 520 PRINT ," ";\PRINT B(6)\PRINT " "; 42 | 525 FOR I=0 TO 5\GOSUB 580 43 | 530 NEXT I 44 | 535 PRINT \PRINT \RETURN 45 | 580 IF B(I)>=10 THEN 585 \PRINT " "; 46 | 585 PRINT B(I);\RETURN 47 | 600 P=B(M)\B(M)=0 48 | 605 FOR P=P TO 1 STEP -1\M=M+1\IF M<14 THEN 610 \M=M-14 49 | 610 B(M)=B(M)+1\NEXT P 50 | 615 IF B(M)<>1 THEN 620 \IF M=6 THEN 620 \IF M=13 THEN 620 51 | 616 IF B(12-M)=0 THEN 620 \GO TO 625 52 | 620 RETURN 53 | 625 B(H)=B(H)+B(12-M)+1\B(M)=0\B(12-M)=0\RETURN 54 | 800 D=-99\H=13 55 | 805 FOR I=0 TO 13\G(I)=B(I)\NEXT I 56 | 810 FOR J=7 TO 12\IF B(J)=0 THEN 885 57 | 815 Q=0\M=J\GOSUB 600 58 | 820 FOR I=0 TO 5\IF B(I)=0GO TO 845 59 | 825 L=B(I)+I\R=0 60 | 830 IF L<=13 THEN 835 \L=L-14\R=1\GO TO 830 61 | 835 IF B(L)<>0 THEN 840 \IF L=6 THEN 840 \IF L=13 THEN 840 \R=B(12-L)+R 62 | 840 IF R<=Q THEN 845 \Q=R 63 | 845 NEXT I 64 | 850 Q=B(13)-B(6)-Q\IF C>8GO TO 875 65 | 855 K=J\IF K<=6 THEN 860 \K=K-7 66 | 860 FOR I=0 TO N-1\IF F(N)*6+K<>INT(F(I)/6^(7-C)+.1) THEN 870 \Q=Q-2 67 | 870 NEXT I 68 | 875 FOR I=0 TO 13\B(I)=G(I)\NEXT I 69 | 880 IF QB(J+1) THEN 390 37 | 380 LET C=C+1 38 | 390 IF A(J+1)<>B(J) THEN 410 39 | 400 LET C=C+1 40 | 410 NEXT J 41 | 420 IF A(1)<>B(3) THEN 440 42 | 430 LET C=C+1 43 | 440 IF A(3)<>B(1) THEN 460 44 | 450 LET C=C+1 45 | 460 FOR J=1 TO 3 46 | 470 IF A(J)<>B(J) THEN 490 47 | 480 LET D=D+1 48 | 490 NEXT J 49 | 500 IF D=3 THEN 680 50 | 520 FOR J=1 TO C 51 | 530 PRINT "PICO "; 52 | 540 NEXT J 53 | 550 FOR J=1 TO D 54 | 560 PRINT "FERMI "; 55 | 570 NEXT J 56 | 580 IF C+D<>0 THEN 600 57 | 590 PRINT "BAGLES"; 58 | 600 PRINT 59 | 605 NEXT I 60 | 610 PRINT "OH WELL" 61 | 615 PRINT "THAT'S 20 GUESSES. MY NUMBER WAS ";100*A(1)+10*A(2)+A(3) 62 | 620 GOTO 700 63 | 630 PRINT "TRY GUESSING A THREE-DIGIT NUMBER."\GOTO 230 64 | 650 PRINT "OH, I FORGOT TO TELL YOU THAT THE NUMBER I HAVE IN" 65 | 660 PRINT "MIND HAS NO TWO DIGITS THE SAME."\GOTO 230 66 | 680 PRINT "YOU GOT IT!!!"\PRINT 67 | 685 FOR I=1 TO 10\PRINT CHR$(7);\NEXT I 68 | 690 LET Y=Y+1 69 | 700 PRINT "PLAY AGAIN (1 FOR YES, 0 FOR NO)";\INPUT A 70 | 720 IF A=1 THEN 150 71 | 730 IF Y=0 THEN 750 72 | 740 PRINT \PRINT "A";Y;"- POINT BAGLES BUFF!!" 73 | 750 PRINT "HOPE YOU HAD FUN. BYE." 74 | 999 END 75 | -------------------------------------------------------------------------------- /programs/bandit.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT "ONE ARM BANDIT" 2 | 2 PRINT 3 | 3 GO TO 20 4 | 4 PRINT "WHAT IS YOUR LUCKY NUMBER TODAY, BETWEEN 1 AND 711"; 5 | 5 INPUT Q 6 | 6 IF Q<1 THEN 2 7 | 7 IF Q>711 THEN 2 8 | 8 PRINT 9 | 9 DATA 43 10 | 10 READ Q9 11 | 11 LET U=INT(Q+Q9) 12 | 12 FOR I=1 TO U 13 | 13 LET V=RND(I) 14 | 14 NEXT I 15 | 15 LET S=INT(30+15*V) 16 | 16 PRINT "GOOD. YOUR STARTING BALANCE IS $";S 17 | 17 PRINT 18 | 18 GO TO 30 19 | 19 PRINT 20 | 20 PRINT "EACH PLAY YOU CAN PUT ANY AMOUNT OF SILVER DOLLARS INTO" 21 | 21 PRINT "THE MACHINE, UP TO THE BALANCE YOU HAVE, BY TYPING IN" 22 | 22 PRINT "THE QUANTITY OF DOLLARS." 23 | 23 PRINT 24 | 24 PRINT "YOU 'PULL DOWN THE HANDLE' BY DEPRESSING THE 'RETURN' KEY." 25 | 25 PRINT 26 | 26 PRINT "WHEN YOUR BALANCE REACHES ZERO, THE GAME IS OVER....." 27 | 27 PRINT "OR TYPE A ZERO ('0') TO QUIT AT ANY TIME. GOOD LUCK..." 28 | 28 PRINT 29 | 29 GO TO 4 30 | 30 PRINT "HOW MANY DOLLARS DO YOU WANT TO PUT IN ON YOUR FIRST PLAY"; 31 | 31 INPUT Z 32 | 32 IF Z=INT(Z) THEN 36 33 | 33 PRINT 34 | 34 PRINT "NO FRACTIONAL DOLLARS ALLOWED AT THIS CASINO!" 35 | 35 GO TO 39 36 | 36 IF Z=0 THEN 41 37 | 37 IF Z0 THEN 123 121 | 121 PRINT "...YOU HAVE RUN OUT OF MONEY..." 122 | 122 GO TO 139 123 | 123 IF D=0 THEN 126 124 | 124 IF E4=1 THEN 126 125 | 125 PRINT "YOU WIN: $";D;" "; 126 | 126 PRINT "BALANCE: $";S;"NEXT WAGER"; 127 | 127 INPUT Z 128 | 128 IF Z=INT(Z) THEN 132 129 | 129 PRINT 130 | 130 PRINT "NO FRACTIONAL DOLLARS ALLOWED AT THIS CASINO!" 131 | 131 GO TO 135 132 | 132 IF Z=0 THEN 145 133 | 133 IF Z0 THEN 370 17 | 360 GO TO 330 18 | 370 IF N<>INT(N) THEN 220 19 | 380 IF N<1 THEN 220 20 | 390 PRINT "ENTER WIN OPTION - 1 TO TAKE LAST, 2 TO AVOID LAST: "; 21 | 400 INPUT M 22 | 410 IF M=1 THEN 430 23 | 420 IF M<>2 THEN 390 24 | 430 PRINT "ENTER MIN AND MAX: "; 25 | 440 INPUT A,B 26 | 450 IF A>B THEN 430 27 | 460 IF A<1 THEN 430 28 | 470 IF A<>INT(A) THEN 430 29 | 480 IF B<>INT(B) THEN 430 30 | 490 PRINT "ENTER START OPTION - 1 COMPUTER FIRST, 2 YOU FIRST: "; 31 | 500 INPUT S 32 | 510 IF S=1 THEN 530 33 | 520 IF S<>2 THEN 490 34 | 530 LET C=A+B 35 | 540 IF S=2 THEN 570 36 | 550 GOSUB 600 37 | 560 IF W=1 THEN 220 38 | 570 GOSUB 810 39 | 580 IF W=1 THEN 220 40 | 590 GO TO 550 41 | 600 LET Q=N 42 | 610 IF M=1 THEN 630 43 | 620 LET Q=Q-1 44 | 630 IF M=1 THEN 680 45 | 640 IF N>A THEN 720 46 | 650 LET W=1 47 | 660 PRINT "COMPUTER TAKES";N;"AND LOSES." 48 | 670 RETURN 49 | 680 IF N>B THEN 720 50 | 690 LET W=1 51 | 700 PRINT "COMPUTER TAKES";N;"AND WINS." 52 | 710 RETURN 53 | 720 LET P=Q-C*INT(Q/C) 54 | 730 IF P>=A THEN 750 55 | 740 LET P=A 56 | 750 IF P<=B THEN 770 57 | 760 LET P=B 58 | 770 LET N=N-P 59 | 780 PRINT "COMPUTER TAKES";P;"AND LEAVES";N 60 | 790 LET W=0 61 | 800 RETURN 62 | 810 PRINT "YOUR MOVE: "; 63 | 820 INPUT P 64 | 830 IF P<>0 THEN 870 65 | 840 PRINT "I TOLD YOU NOT TO USE ZERO... COMPUTER WINS BY FORFEIT." 66 | 850 LET W=1 67 | 860 RETURN 68 | 870 IF P<>INT(P) THEN 920 69 | 880 IF P>=A THEN 910 70 | 890 IF P=N THEN 960 71 | 900 GO TO 920 72 | 910 IF P<=B THEN 940 73 | 920 PRINT "ILLEGAL MOVE, REENTER IT: "; 74 | 930 GO TO 820 75 | 940 LET N=N-P 76 | 950 IF N<>0 THEN 1030 77 | 960 IF M=1 THEN 1000 78 | 970 PRINT "TOUGH LUCK, YOU LOSE." 79 | 980 LET W=1 80 | 990 RETURN 81 | 1000 PRINT "CONGRATULATIONS, YOU WIN." 82 | 1010 LET W=1 83 | 1020 RETURN 84 | 1030 IF N>=0 THEN 1060 85 | 1040 LET N=N+P 86 | 1050 GO TO 920 87 | 1060 LET W=0 88 | 1070 RETURN 89 | 1080 END 90 | -------------------------------------------------------------------------------- /programs/bomb.bas: -------------------------------------------------------------------------------- 1 | 10 REM *** WRITTEN BY TOM KARZES, CURTIS JR HS, SUDBURY, MA 2 | 20 REM *** MODIFIED BY DAVE AHL, DIGITAL 3 | 30 PRINT "YOU ARE IN A LARGE, NEW GOVERNMENT BUILDING WITH 1,000,000" 4 | 40 PRINT "ROOMS IN IT. THE BUILDING IS 100 ROOMS LONG (0-99), 100" 5 | 50 PRINT "ROOMS WIDE (0-99), AND 100 FLOORS HIGH (0-99)." \ PRINT 6 | 60 PRINT "A MAD BOMBER HAS HIDDEN A BOMB IN ONE OF THE ROOMS AND" 7 | 70 PRINT "HAS JUST PHONED A THREAT THAT THE BOMB IS SET TO GO" 8 | 80 PRINT "OFF IN 200 SECONDS. FORTUNATELY, YOU HAPPEN TO HAVE A BOMB-" 9 | 90 PRINT "TRACKER THAT SENDS OUT SIGNALS THAT GET STRONGER AS YOU" 10 | 100 PRINT "GET CLOSER TO THE BOMB. YOU ARE STARTING IN ROOM 0,0,0" 11 | 110 PRINT "AND IT TAKES 10 SECONDS TO MOVE TO ANY OTHER ROOM." \ PRINT 12 | 120 RANDOMIZE \ A=INT(100*RND) \ B=INT(100*RND) \ C=INT(100*RND) 13 | 130 IF A=0 THEN IF B=0 THEN IF C=0 THEN 120 14 | 140 P1=A/100+B+C*100 \ D=0 \ E=0 \ F=0 \ G=0 \ P=0 15 | 150 PRINT "SIGNAL","CURRENT ROOM","SEC. INTO","COORDINATES FOR" 16 | 160 PRINT "STRENGTH","L , W , H","MISSION","SEARCH (L,W,H)" 17 | 170 B$=" ####.## ## ## ## ### " 18 | 180 PRINT USING B$,10000-ABS(P1-P),D,E,F,G; 19 | 190 INPUT D,E,F \ G=G+10 \ P=D/100+E+F*100 \ IF P=P1 THEN 260 20 | 200 IF G=200 THEN 220 21 | 210 GO TO 270 22 | 220 PRINT "BOOOOOOOMMM!!!" \ PRINT "YOU BLEW IT. THE BUILDING BLEW UP." 23 | 230 PRINT \ PRINT "WANT TO PLAY AGAIN (YES OR NO)"; \ INPUT A$ 24 | 240 IF A$="NO" THEN 440 25 | 250 PRINT \ PRINT \ GO TO 120 26 | 260 PRINT "BOMB DEACTIVATED AT";G;"SECONDS!!!" \ PRINT \ GO TO 230 27 | 270 IF D>99 THEN 340 28 | 280 IF D<0 THEN 340 29 | 290 IF E>99 THEN 340 30 | 300 IF E<0 THEN 340 31 | 310 IF F>99 THEN 380 32 | 320 IF F<0 THEN 390 33 | 330 GO TO 180 34 | 340 PRINT "YOU WALKED OUT A WINDOW ON THE"; \ IF F<4 THEN 400 35 | 350 PRINT F;"TH FLOOR!!!" 36 | 360 PRINT "YOU WERE KILLED AND";200-G;"SECONDS LATER THE BUILDING" 37 | 370 PRINT "BLEW UP!!!" \ PRINT \ GO TO 230 38 | 380 PRINT "YOU ARE NOW";F*9;"FEET IN THE AIR!!!" \ GO TO 360 39 | 390 PRINT "YOU ARE NOW -";F*9;"FEET UNDERGROUND!!!" \ GO TO 360 40 | 400 ON F GO TO 410,420,430 41 | 410 PRINT " 1ST FLOOR!!!" \ GO TO 360 42 | 420 PRINT " 2ND FLOOR!!!" \ GO TO 360 43 | 430 PRINT " 3RD FLOOR!!!" \ GO TO 360 44 | 440 END 45 |  -------------------------------------------------------------------------------- /programs/bounce.bas: -------------------------------------------------------------------------------- 1 | 90 DIM T(20) 2 | 100 PRINT "THIS SIMULATION LETS YOU SPECIFY THE INITIAL VELOCITY" 3 | 110 PRINT "OF A BALL THROWN STRAIGHT UP, AND THE COEFFICIENT OF" 4 | 120 PRINT "ELASTICITY OF THE BALL. PLEASE USE A DECIMAL FRACTION" 5 | 130 PRINT "COEFFICIENT (LESS THAN 1)." 6 | 131 PRINT 7 | 132 PRINT "YOU ALSO SPECIFY THE TIME INCREMENT TO BE USED IN" 8 | 133 PRINT "'STROBING' THE BALL'S FLIGHT (TRY .1 INITIALLY)." 9 | 134 PRINT 10 | 135 PRINT "TIME INCREMENT (SEC)"; 11 | 136 INPUT S2 12 | 140 PRINT 13 | 150 PRINT "VELOCITY (FPS)"; 14 | 160 INPUT V 15 | 165 PRINT 16 | 170 PRINT "COEFFICIENT"; 17 | 180 INPUT C 18 | 184 PRINT 19 | 185 PRINT "FEET" 20 | 186 PRINT 21 | 187 S1=INT(70/(V/(16*S2))) 22 | 190 FOR I=1 TO S1 23 | 200 T(I)=V*C^(I-1)/16 24 | 210 NEXT I 25 | 220 FOR H=INT(-16*(V/32)^2+V^2/32+.5) TO 0 STEP -.5 26 | 221 IF INT(H)<>H THEN 225 27 | 222 PRINT H; 28 | 225 L=0 29 | 230 FOR I=1 TO S1 30 | 240 FOR T=0 TO T(I) STEP S2 31 | 245 L=L+S2 32 | 250 IF ABS(H-(.5*(-32)*T^2+V*C^(I-1)*T))>.25 THEN 270 33 | 260 PRINT TAB(L/S2);"O"; 34 | 270 NEXT T 35 | 275 T=T(I+1)/2 36 | 276 IF -16*T^2+V*C^(I-1)*T= 2 THEN 1040 24 | 00150 IF L>=2 THEN 1060 25 | 00160 X=0 26 | 00170 Y=0 27 | 00175 PRINT 28 | 00180 PRINT "ROUND"R"BEGINS..." 29 | 00181 PRINT "" 30 | 00185 FOR R1=1 TO 7 31 | 00190 I=INT(10*RND+1) 32 | 00200 IF I>5 THEN 600 33 | 00210 PRINT L$"'S PUNCH"; 34 | 00220 INPUT P 35 | 00221 IF P=B THEN 225 36 | 00222 GO TO 230 37 | 00225 X=X+2 38 | 00230 IF P=1 THEN 340 39 | 00240 IF P=2 THEN 450 40 | 00250 IF P=3 THEN 520 41 | 00270 PRINT L$" JABS AT "J$"'S HEAD "; 42 | 00271 IF D1=4 THEN 290 43 | 00275 C=INT(8*RND+1) 44 | 00280 IF C<4 THEN 310 45 | 00290 X=X+3 46 | 00300 GO TO 950 47 | 00310 PRINT "IT'S BLOCKED" 48 | 00330 GO TO 950 49 | 00340 PRINT L$" SWINGS AND "; 50 | 00341 IF D1=4 THEN 410 51 | 00345 X3 =INT(30 *RND+1) 52 | 00350 IF X3<10 THEN 410 53 | 00360 PRINT "HE MISSES "; 54 | 00375 IF X=1 THEN 950 55 | 00380 PRINT 56 | 00390 PRINT 57 | 00400 GO TO 300 58 | 00410 PRINT "HE CONNECTS!" 59 | 00420 IF X>35 THEN 980 60 | 00425 X=X+15 61 | 00440 GO TO 300 62 | 00450 PRINT L$" GIVES THE HOOK... "; 63 | 00455 IF D1=2 THEN 480 64 | 00460 H1 =INT(2*RND+1) 65 | 00470 IF H1=1 THEN 500 66 | 00475 PRINT "CONNECTS..." 67 | 00480 X=X+7 68 | 00490 GO TO 300 69 | 00500 PRINT "BUT IT'S BLOCKED!!!!!" 70 | 00510 GO TO 300 71 | 00520 PRINT L$" TRIES AN UPPERCUT "; 72 | 00530 IF D1=3 THEN 570 73 | 00540 D5=INT(100*RND+1) 74 | 00550 IF D5<51 THEN 570 75 | 00560 PRINT "AND IT'S BLOCKED (LUCKY BLOCK!)" 76 | 00565 GO TO 300 77 | 00570 PRINT "AND HE CONNECTS!" 78 | 00580 X=X+4 79 | 00590 GO TO 300 80 | 00600 J7=INT(4*RND+1) 81 | 00601 IF J7=B1 THEN 605 82 | 00602 GO TO 610 83 | 00605 Y=Y+2 84 | 00610 IF J7=1 THEN 720 85 | 00620 IF J7=2 THEN 810 86 | 00630 IF J7=3 THEN 860 87 | 00640 PRINT J$" JABS AND "; 88 | 00645 IF D=4 THEN 700 89 | 00650 Z4 =INT(7*RND+1) 90 | 00655 IF Z4>4 THEN 690 91 | 00660 PRINT " IT'S BLOCKED!" 92 | 00670 GO TO 300 93 | 00690 PRINT " BLOOD SPILLS!!!" 94 | 00700 Y=Y+5 95 | 00710 GO TO 300 96 | 00720 PRINT J$" TAKES A FULL SWING AND"; 97 | 00730 IF D=1 THEN 770 98 | 00740 R6=INT(60*RND+1) 99 | 00745 IF R6 <30 THEN 770 100 | 00750 PRINT " BUT IT'S BLOCKED!" 101 | 00760 GO TO 300 102 | 00770 PRINT " POW!!! HE HITS HIM RIGHT IN THE FACE!" 103 | 00780 IF Y>35 THEN 1010 104 | 00790 Y=Y+15 105 | 00800 GO TO 300 106 | 00810 PRINT J$" GETS "L$" IN THE JAW (OUCH!)" 107 | 00820 Y=Y+7 108 | 00830 PRINT "...AND AGAIN!" 109 | 00835 Y=Y+5 110 | 00840 IF Y>35 THEN 1010 111 | 00850 PRINT 112 | 00860 PRINT L$" IS ATTACKED BY AN UPPERCUT (OH, OH)..." 113 | 00865 IF D=3 THEN 890 114 | 00870 Q4=INT(200*RND+1) 115 | 00880 IF Q4>75 THEN 920 116 | 00890 PRINT " AND "J$" CONNECTS..." 117 | 00900 Y=Y+8 118 | 00910 GO TO 300 119 | 00920 PRINT " BLOCKS AND HITS "J$" WITH A HOOK." 120 | 00930 X=X+5 121 | 00940 GO TO 300 122 | 00950 NEXT R1 123 | 00951 IF X>Y THEN 955 124 | 00952 PRINT J$" WINS ROUND"R 125 | 00953 J=J+1 126 | 00954 GO TO 960 127 | 00955 PRINT L$" WINS ROUND"R 128 | 00956 L=L+1 129 | 00960 NEXT R 130 | 00961 IF J>= 2 THEN 1040 131 | 00962 IF L>=2 THEN 1060 132 | 00980 PRINT J$" IS KNOCKED COLD AND "L$" IS THE WINNER AND CHAMP "; 133 | 01000 GO TO 1080 134 | 01010 PRINT L$" IS KNOCKED COLD AND "J$" IS THE WINNER AND CHAMP "; 135 | 01030 GO TO 1000 136 | 01040 PRINT J$" WINS (NICE GOING, "J$")" 137 | 01050 GO TO 1000 138 | 01060 PRINT L$" AMAZINGLY WINS " 139 | 01070 GO TO 1000 140 | 01080 PRINT 141 | 01085 PRINT 142 | 01090 PRINT "AND NOW GOODBYE FROM OLYMPIC ARENA" 143 | 01100 PRINT 144 | 01110 END 145 | -------------------------------------------------------------------------------- /programs/buzzwd.bas: -------------------------------------------------------------------------------- 1 | 100 PRINT"THIS COMPUTER DEMONSTRATION IS A NEW AID FOR" 2 | 110 PRINT"PREPARING SPEECHES AND BRIEFINGS. IT'S A BUZZWORD" 3 | 120 PRINT"GENERATOR WHICH PROVIDES YOU WITH A SET OF 3 HIGHLY" 4 | 130 PRINT"ACCEPTABLE WORDS TO WORK INTO YOUR MATERIAL. THE WORDS" 5 | 140 PRINT"DON'T ACTUALLY MEAN ANYTHING, BUT THEY SOUND GREAT." 6 | 150 PRINT 7 | 160 PRINT"THE PROCEDURE:" 8 | 170 PRINT" THINK OF ANY THREE NUMBERS BETWEEN 0 AND 9. ENTER" 9 | 180 PRINT" THEM AFTER THE '?' SEPARATED BY COMMAS. YOUR" 10 | 190 PRINT" BUZZWORD WILL BE PRINTED OUT. TYPING '100' FOR" 11 | 191 PRINT" EACH OF YOUR CHOICES STOPS THIS PROGRAM." 12 | 210 PRINT "WHAT ARE YOUR THREE NUMBERS"; 13 | 220 GOTO260 14 | 230 PRINT 15 | 240 PRINT 16 | 250 PRINT"THREE MORE NUMBERS"; 17 | 260 INPUT N,M,P 18 | 265 IF N=100 THEN 1290 19 | 270 IF N9 THEN 1240 23 | 310 IF P>9 THEN 1240 24 | 320 IF M>9 THEN 1240 25 | 330 PRINT 26 | 340 IF N=0 THEN 640 27 | 350 IF N=1THEN 660 28 | 360 IF N=2THEN 680 29 | 370 IF N=3THEN 700 30 | 380 IF N=4 THEN 720 31 | 390 IF N=5THEN 740 32 | 400 IF N=6THEN 760 33 | 410 IF N=7THEN 780 34 | 420 IF N=8THEN 800 35 | 430 IF N=9THEN 820 36 | 440 IF M=0 THEN 840 37 | 450 IF M=1 THEN 860 38 | 460 IF M=2 THEN 880 39 | 470 IF M=3 THEN 900 40 | 480 IF M=4 THEN 920 41 | 490 IF M=5 THEN 940 42 | 500 IF M=6 THEN 960 43 | 510 IF M=7 THEN 980 44 | 520 IF M=8 THEN 1000 45 | 530 IF M=9 THEN 1020 46 | 540 IF P=0 THEN 1040 47 | 550 IF P=1 THEN 1060 48 | 560 IF P=2 THEN 1080 49 | 570 IF P=3 THEN 1100 50 | 580 IFP=4 THEN 1120 51 | 590 IF P=5 THEN 1140 52 | 600 IF P=6 THEN 1160 53 | 610 IF P=7 THEN 1180 54 | 620 IF P=8 THEN 1200 55 | 630 IF P=9 THEN 1220 56 | 640 PRINT" INTEGRATED"; 57 | 650 GOTO440 58 | 660 PRINT" TOTAL"; 59 | 670 GOTO440 60 | 680 PRINT "SYSTEMATIZED"; 61 | 690 GOTO440 62 | 700 PRINT" PARALLEL"; 63 | 710 GO TO 440 64 | 720 PRINT" FUNCTIONAL"; 65 | 730 GOTO440 66 | 740 PRINT" RESPONSIVE"; 67 | 750 GOTO440 68 | 760 PRINT" OPTIMAL"; 69 | 770 GOTO440 70 | 780 PRINT" SYNCHRONIZED"; 71 | 790 GOTO440 72 | 800 PRINT " COMPATIBLE"; 73 | 810 GOTO440 74 | 820 PRINT" BALANCED"; 75 | 830 GOTO440 76 | 840 PRINT" MANAGEMENT"; 77 | 850 GOTO 540 78 | 860 PRINT" ORGANIZATIONAL"; 79 | 870 GOTO 540 80 | 880 PRINT" MONITORED"; 81 | 890 GOTO 540 82 | 900 PRINT" RECIPROCAL"; 83 | 910 GOTO 540 84 | 920 PRINT" DIGITAL"; 85 | 930 GOTO 540 86 | 940 PRINT" LOGISTICAL"; 87 | 950 GOTO 540 88 | 960 PRINT " TRANSITIONAL"; 89 | 970 GOTO 540 90 | 980 PRINT" INCREMENTAL"; 91 | 990 GOTO 540 92 | 1000 PRINT" THIRD-GENERATION"; 93 | 1010 GO TO 540 94 | 1020 PRINT" POLICY"; 95 | 1030 GOTO 540 96 | 1040 PRINT" OPTIONS" 97 | 1050 GOTO 230 98 | 1060 PRINT " FLEXIBILITY" 99 | 1070 GO TO 230 100 | 1080 PRINT" CAPABILITY" 101 | 1090 GOTO230 102 | 1100 PRINT" MOBILITY" 103 | 1110 GOTO230 104 | 1120 PRINT" PROGRAMMING" 105 | 1130 GO TO 230 106 | 1140 PRINT" CONCEPT" 107 | 1150 GOTO230 108 | 1160 PRINT" TIME-PHASE" 109 | 1170 GOTO230 110 | 1180 PRINT" PROJECTION" 111 | 1190 GOTO230 112 | 1200 PRINT" HARDWARE" 113 | 1210 GOTO230 114 | 1220 PRINT" CONTINGENCY" 115 | 1230 GOTO230 116 | 1240 PRINT 117 | 1250 PRINT 118 | 1260 PRINT"NUMBERS MUST BE BETWEEN 0 AND 9. PLEASE SELECT THREE MORE." 119 | 1270 GOTO 260 120 | 1280 GOTO 260 121 | 1290 PRINT "GOODBYE FOR NOW! " 122 | 1300 PRINT\PRINT\PRINT 123 | 1320 END 124 | -------------------------------------------------------------------------------- /programs/chomp.bas: -------------------------------------------------------------------------------- 1 | 5 REM *** CONVERTED TO RSTS/E BY DAVID AHL, DIGITAL 2 | 100 REM ***THE GAME OF CHOMP*** 3 | 105 REM ***SUBMITTED BY PEOPLES COMPUTER CENTER*** 4 | 110 PRINT 5 | 120 PRINT "THIS IS THE GAME OF CHOMP (SCIENTIFIC AMERICAN, JAN 1973)" 6 | 130 PRINT "WANT THE RULES (1=YES, 0=NO!)"; 7 | 140 INPUT R 8 | 150 IF R=0 THEN 340 9 | 160 F=1 10 | 170 R=5 11 | 180 C=7 12 | 190 PRINT "CHOMP IS FOR 1 OR MORE PLAYERS (HUMANS ONLY)." 13 | 200 PRINT 14 | 210 PRINT "HERE'S HOW A BOARD LOOKS (THIS ONE IS 5 BY 7):" 15 | 220 GOSUB 540 16 | 230 PRINT 17 | 240 PRINT "THE BOARD IS A BIG COOKIE - R ROWS HIGH AND C COLUMNS" 18 | 250 PRINT "WIDE. YOU INPUT R AND C AT THE START. IN THE UPPER LEFT" 19 | 260 PRINT "CORNER OF THE COOKIE IS A POISON SQUARE (P). THE ONE WHO" 20 | 270 PRINT "CHOMPS THE POISON SQUARE LOSES. TO TAKE A CHOMP, TYPE THE" 21 | 280 PRINT "ROW AND COLUMN OF ONE OF THE SQUARES ON THE COOKIE." 22 | 290 PRINT "ALL OF THE SQUARES BELOW AND TO THE RIGHT OF THAT SQUARE" 23 | 300 PRINT "(INCLUDING THAT SQUARE, TOO) DISAPPEAR -- CHOMP!!" 24 | 310 PRINT "NO FAIR CHOMPING SQUARES THAT HAVE ALREADY BEEN CHOMPED," 25 | 320 PRINT "OR THAT ARE OUTSIDE THE ORIGINAL DIMENSIONS OF THE COOKIE." 26 | 330 PRINT 27 | 340 PRINT "HERE WE GO..." 28 | 350 DIM A(10,10) 29 | 360 F=0 30 | 370 FOR I=1 TO 10 31 | 372 FOR J=1 TO 10 32 | 375 A(I,J)=0 33 | 377 NEXT J 34 | 379 NEXT I 35 | 380 PRINT 36 | 390 PRINT "HOW MANY PLAYERS"; 37 | 400 INPUT P 38 | 410 I1=0 39 | 420 PRINT "HOW MANY ROWS"; 40 | 430 INPUT R 41 | 440 IF R <= 9 THEN 470 42 | 450 PRINT "TOO MANY ROWS (9 IS MAXIMUM). NOW, "; 43 | 460 GOTO 420 44 | 470 PRINT "HOW MANY COLUMNS"; 45 | 480 INPUT C 46 | 490 IF C <= 9 THEN 530 47 | 500 PRINT "TOO MANY COLUMNS (9 IS MAXIMUM). NOW, "; 48 | 510 GOTO 470 49 | 530 PRINT 50 | 540 FOR I=1 TO R 51 | 550 FOR J=1 TO C 52 | 560 A(I,J)=1 53 | 570 NEXT J 54 | 580 NEXT I 55 | 590 A(1,1)=-1 56 | 600 REM PRINT THE BOARD 57 | 610 PRINT 58 | 620 PRINT TAB(7);"1 2 3 4 5 6 7 8 9" 59 | 630 FOR I=1 TO R 60 | 640 PRINT I;TAB(7); 61 | 650 FOR J=1 TO C 62 | 660 IF A(I,J)=-1 THEN 700 63 | 670 IF A(I,J)=0 THEN 720 64 | 680 PRINT "* "; 65 | 690 GOTO 710 66 | 700 PRINT "P "; 67 | 710 NEXT J 68 | 720 PRINT 69 | 730 NEXT I 70 | 740 PRINT 71 | 750 IF F=0 THEN 770 72 | 760 RETURN 73 | 770 REM GET CHOMPS FOR EACH PLAYER IN TURN 74 | 780 LET I1=I1+1 75 | 790 LET P1=I1-INT(I1/P)*P 76 | 800 IF P1 <> 0 THEN 820 77 | 810 P1=P 78 | 820 PRINT "PLAYER ";P1 79 | 830 PRINT "COORDINATES OF CHOMP (ROW,COLUMN)"; 80 | 840 INPUT R1,C1 81 | 850 IF R1<1 THEN 920 82 | 860 IF R1>R THEN 920 83 | 870 IF C1<1 THEN 920 84 | 880 IF C1>C THEN 920 85 | 890 IF A(R1,C1)=0 THEN 920 86 | 900 IF A(R1,C1)=-1 THEN 1010 87 | 910 GOTO 940 88 | 920 PRINT "NO FAIR. YOU'RE TRYING TO CHOMP ON EMPTY SPACE!" 89 | 930 GOTO 820 90 | 940 FOR I=R1 TO R 91 | 950 FOR J=C1 TO C 92 | 960 A(I,J)=0 93 | 970 NEXT J 94 | 980 NEXT I 95 | 990 GOTO 610 96 | 1000 REM END OF GAME DETECTED IN LINE 900 97 | 1010 PRINT "YOU LOSE, PLAYER ";P1 98 | 1020 PRINT 99 | 1030 PRINT "AGAIN (1=YES; 0=NO!)"; 100 | 1040 INPUT R 101 | 1050 IF R=1 THEN 340 102 | 1060 END 103 | -------------------------------------------------------------------------------- /programs/crap.bas: -------------------------------------------------------------------------------- 1 | 1 PRINT "CRAP GAME WITH THE COMPUTER AS YOUR OPPONENT." 2 | 2 PRINT "THE RULES ARE SIMPLE:" 3 | 3 PRINT " *A 7 OR 11 ON THE FIRST ROLL WINS" 4 | 4 PRINT " *A 2, 3, OR 12 ON THE FIRST ROLL LOSES" 5 | 5 PRINT 6 | 6 PRINT "ANY OTHER NUMBER ROLLED BECOMES YOUR 'POINT'. YOU CONTINUE" 7 | 7 PRINT "TO ROLL... IF YOU GET YOUR POINT, YOU WIN. IF YOU ROLL A 7," 8 | 8 PRINT "YOU LOSE. THE DICE CHANGE HANDS WHEN THIS HAPPENS." 9 | 9 PRINT 10 | 10 PRINT 11 | 11 PRINT "WHAT NUMBER BETWEEN 1 AND 711 IS LUCKY FOR YOU TODAY"; 12 | 12 INPUT N 13 | 13 FOR I=1 TO N 14 | 14 LET X=RND(I) 15 | 15 NEXT I 16 | 16 LET Z=5*INT(10+11*RND(I)) 17 | 17 PRINT "SPLENDID... YOU ARE GIVEN ";Z;"DOLLARS TO PLAY WITH." 18 | 18 PRINT 19 | 19 PRINT 20 | 20 REM IF N IS EVEN 'YOU' ROLL FIRST, IF N IS ODD 'I' ROLL FIRST. 21 | 21 IF N-2*INT(N/2)=0 THEN 27 22 | 22 LET W=-1 23 | 23 PRINT "I'LL ROLL FIRST..." 24 | 24 PRINT 25 | 25 PRINT 26 | 26 GO TO 31 27 | 27 LET W=1 28 | 28 PRINT "YOU ROLL FIRST..." 29 | 29 PRINT 30 | 30 PRINT 31 | 31 LET Q=0 32 | 32 PRINT "HOW MUCH DO YOU BET ($$) "; 33 | 33 INPUT B 34 | 34 PRINT "OK..." 35 | 35 PRINT 36 | 36 IF B=INT(B) THEN 40 37 | 37 PRINT 38 | 38 PRINT "NO COINS PERMITTED... JUST BILLS, PLEASE!" 39 | 39 GO TO 32 40 | 40 IF B=0 THEN 108 41 | 41 IF B0 THEN 51 49 | 49 PRINT " I ROLL";D1;"AND";D2; 50 | 50 GO TO 52 51 | 51 PRINT "YOU ROLL";D1;"AND";D2; 52 | 52 IF Q<>1 THEN 84 53 | 53 IF (S-2)*(S-3)*(S-12)=0 THEN 62 54 | 54 IF (S-7)*(S-11)=O THEN 69 55 | 55 IF W>0 THEN 58 56 | 56 PRINT "SO MY POINT IS";S; 57 | 57 GO TO 59 58 | 58 PRINT "SO YOUR POINT IS";S; 59 | 59 PRINT "...LET'S ROLL 'EM AGAIN..." 60 | 60 LET P=S 61 | 61 GO TO 44 62 | 62 PRINT "AND CRAP OUT..." 63 | 63 LET C=1 64 | 64 IF W>0 THEN 67 65 | 65 LET Z=Z+B 66 | 66 GO TO 75 67 | 67 LET Z=Z-B 68 | 68 GO TO 75 69 | 69 PRINT "AND PASS..." 70 | 70 LET C=1 71 | 71 IF W>0 THEN 74 72 | 72 LET Z=Z-B 73 | 73 GO TO 75 74 | 74 LET Z=Z+B 75 | 75 PRINT 76 | 76 IF Z<1 THEN 104 77 | 77 PRINT "YOU NOW HAVE ";Z;"DOLLARS LEFT..." 78 | 78 IF C>0 THEN 81 79 | 79 PRINT "CHANGE DICE NOW..." 80 | 80 PRINT 81 | 81 LET W=W*C 82 | 82 LET Q=0 83 | 83 GO TO 32 84 | 84 IF S<>7 THEN 92 85 | 85 PRINT "AND LOSE..." 86 | 86 LET C=-1 87 | 87 IF W>0 THEN 90 88 | 88 LET Z=Z+B 89 | 89 GO TO 75 90 | 90 LET Z=Z-B 91 | 91 GO TO 75 92 | 92 IF S=P THEN 95 93 | 93 PRINT "...ROLL AGAIN..." 94 | 94 GO TO 44 95 | 95 IF W>0 THEN 100 96 | 96 PRINT "AND MAKE MY POINT..." 97 | 97 LET C=1 98 | 98 LET Z=Z-B 99 | 99 GO TO 75 100 | 100 PRINT "AND MAKE YOUR POINT..." 101 | 101 LET C=1 102 | 102 LET Z=Z+B 103 | 103 GO TO 75 104 | 104 PRINT 105 | 105 PRINT "YOU HAVE RUN OUT OF MONEY... SORRY ABOUT THAT..." 106 | 106 PRINT "THANKS FOR THE GAME... BETTER LUCK NEXT TIME, PARTNER!" 107 | 107 GO TO 110 108 | 108 PRINT "THANKS FOR THE GAME... AND CONGRATULATIONS" 109 | 109 PRINT "FOR BEING ABLE TO QUIT WHILE YOU WERE AHEAD." 110 | 110 STOP 111 | 120 END 112 | -------------------------------------------------------------------------------- /programs/cycles.bas: -------------------------------------------------------------------------------- 1 | 10 REM -- PROGRAM TO PRINT OUT BIORHYTHMS FOR ONE MONTH 2 | 20 REM GIVEN A BIRTHDATE AND A MONTH 3 | 30 REM 4 | 40 DIM M9(12),L(3),V(4),C$(4),M$(12) 5 | 50 DIM #2,V1$(4096)=1 6 | 60 OPEN "CYCLES.DAT" FOR OUTPUT AS FILE #2 7 | 70 REM 8 | 80 REM -- CALCULATE JULIAN DAY BASED ON DATE 9 | 90 REM 10 | 100 DEF FNJ(D0,M0,Y0)=M9(M0)+D0+SGN(INT(M0/3))*(1+SGN(4*INT(Y0/4)-Y0)) 11 | 110 REM 12 | 120 REM -- CALCULATE DAYS BETWEEN TWO JULIAN DATES 13 | 130 REM 14 | 140 DEF FND(J1,Y1,J2,Y2)=INT(Y2/4-1-INT(Y1/4))+J2-J1+365*(Y2-Y1) 15 | 150 REM 16 | 160 REM -- INITIALIZE THE ARRAYS 17 | 170 REM 18 | 180 READ D$ \ FOR I=1 TO 3 \ READ L(I) \ NEXT I 19 | 190 FOR I=1 TO 4 \ READ C$(I) \ NEXT I 20 | 200 FOR I=1 TO 12 \ READ M9(I) \ NEXT I 21 | 210 FOR I=1 TO 12 \ READ M$(I) \ NEXT I 22 | 220 DATA "-" 23 | 230 DATA 23,28,33 24 | 240 DATA "P","E","I","*" 25 | 250 DATA 0,31,59,90,120,151,181,212,243,273,304,334 26 | 260 DATA "JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY" 27 | 270 DATA "AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER" 28 | 280 PRINT "OUTPUT DEV:FILNAM.EXT"; \ INPUT F$ 29 | 290 IF F$="" THEN 310 30 | 300 GO TO 320 31 | 310 LET F$="TI:" 32 | 320 OPEN F$ FOR OUTPUT AS FILE #1 33 | 330 REM 34 | 340 REM -- RESET ARRAY P$ 35 | 350 REM 36 | 360 FOR J=1 TO 41 37 | 370 FOR I=1 TO 93 \ V1$(93*(J-1)+I)=" " \ NEXT I 38 | 380 NEXT J 39 | 390 FOR I=1 TO 93 40 | 400 V1$(1860+I)="-" 41 | 410 NEXT I 42 | 420 REM 43 | 430 PRINT "INPUT BIRTHDATE IN FORMAT MMDDYYYY -- "; \ INPUT #0:N$ 44 | 440 B2=VAL(SEG$(N$,1,2)) \ B1=VAL(SEG$(N$,3,4)) \ B3=VAL(SEG$(N$,5,8)) 45 | 450 PRINT "INPUT DESIRED MONTH IN FORMAT MMYYYY -- "; \ INPUT #0:N$ 46 | 460 C2=VAL(SEG$(N$,1,2)) \ C3=VAL(SEG$(N$,3,6)) 47 | 470 REM 48 | 480 T0=FND(FNJ(B1,B2,B3),B3,FNJ(1,C2,C3),C3) 49 | 490 T=T0 50 | 500 REM 51 | 510 PRINT "NAME, PLEASE -- "; \ INPUT #0:N$ 52 | 520 PRINT "INPUT ANY MISCELLANEOUS COMMENT HERE. " \ INPUT L$ 53 | 530 PRINT \ PRINT 54 | 540 PRINT #1:TAB(50);N$ 55 | 550 PRINT #1:,,L$ \ PRINT #1: 56 | 560 PRINT #1:,,"BIORHYTHM CHART FOR ";M$(C2);" ";C3 57 | 570 PRINT #1: 58 | 580 PRINT #1:,,"CHARTING THE PHYSICAL - P (23 DAY CYCLE)" 59 | 590 PRINT #1:,," EMOTIONAL - E (28 DAY CYCLE)" 60 | 600 PRINT #1:,," INTELLECTUAL - I (33 DAY CYCLE)" 61 | 610 PRINT #1:,," AND OVERALL - *" 62 | 620 PRINT #1:,"THESE CYCLES ARE BELIEVED TO OCCUR IN "; 63 | 630 PRINT #1:"EVERYONE, BEGINNING ON THE DAY OF THEIR BIRTH." 64 | 640 PRINT #1: \ PRINT #1:,"NUMBER OF CYCLES SINCE BIRTH: "; 65 | 650 FOR I=1 TO 3 \ PRINT #1:C$(I);" ";T/L(I), \ NEXT I 66 | 660 PRINT #1: 67 | 670 REM 68 | 680 REM -- COMPUTE THE CYCLES AND SET ARRAY P$ 69 | 690 REM 70 | 700 LET P=3.14159 71 | 710 FOR I=1 TO 93 72 | 720 FOR K=1 TO 3 73 | 730 LET V(K)=-20*SIN(T/L(K)*2*P) 74 | 740 NEXT K 75 | 750 V(4)=(V(1)+V(2)+V(3))/3 76 | 760 FOR K=1 TO 4 77 | 770 K0=INT(ABS(V(K)+.5)*SGN(V(K)))+21 78 | 780 V1$(93*(K0-1)+I)=C$(K) 79 | 790 NEXT K 80 | 800 T=T+1/3 81 | 810 NEXT I 82 | 820 REM 83 | 830 REM -- PRINT ARRAY P$ 84 | 840 REM 85 | 850 PRINT #1: \ PRINT #1: 86 | 860 FOR J=1 TO 41 87 | 870 PRINT #1:,"I "; 88 | 880 FOR I=1 TO 93 \ PRINT #1:V1$(93*(J-1)+I); \ NEXT I 89 | 890 PRINT #1: 90 | 900 NEXT J 91 | 910 PRINT #1:,"I--+-----------+--------------+--------------+------"; 92 | 920 PRINT #1:"--------+--------------+--------------+---" 93 | 930 PRINT #1:," 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17"; 94 | 940 PRINT #1:" 18 19 20 21 22 23 24 25 26 27 28 29 30 31" 95 | 950 PRINT #1: \ PRINT #1: \ PRINT #1: \ PRINT #1:TAB(48);M$(C2);" ";C3 96 | 960 PRINT #1:CHR$(12) \ CLOSE #1 97 | 970 END 98 | -------------------------------------------------------------------------------- /programs/dates.bas: -------------------------------------------------------------------------------- 1 | 10 REM ***** PROGRAM 'DATES' **************** 2 | 20 REM ***** SUBMITTED BY HERMAN COHEN ****** 3 | 30 REM ***** USER: 73565,634 **************** 4 | 50 REM ***** [213] 645-2185 ***************** 5 | 60 REM ************************************** 6 | 70 E$=CHR$(27) 7 | 80 PRINT "" 8 | 90 PRINT 9 | 100 LET Y1=1979 10 | 110 GOSUB 1580 11 | 120 PRINT "ENTER TODAY'S DATE IN THIS FORM: MONTH,DAY,YEAR (NUMBERS ONLY)"; 12 | 130 INPUT M1,D1,Y1 13 | 140 IF M1>12 THEN PRINT " ILLEGAL MONTH, TRY AGAIN" \ PRINT \ GO TO 120 14 | 150 IF D1>31 THEN PRINT " ILLEGAL DAY, TRY AGAIN" \ PRINT \ GO TO 120 15 | 160 IF Y1>100 THEN 180 16 | 170 LET Y1=Y1+1900 17 | 180 DEF FNA(A)=INT(A/4) 18 | 190 DIM T(12) 19 | 200 DEF FNB(A)=INT(A/7) 20 | 210 FOR I=1 TO 12 21 | 220 READ T(I) 22 | 230 NEXT I 23 | 240 PRINT 24 | 250 PRINT "(ENTER ALL ZERO'S TO END PROGRAM)" 25 | 260 PRINT 26 | 270 PRINT "FACTS ABOUT A DATE OF INTEREST TO YOU" 27 | 280 PRINT 28 | 290 PRINT "ENTER ANY DATE IN THIS FORM: MONTH,DAY,YEAR--SAMPLE (12,05,1979)"; 29 | 300 INPUT M,D,Y 30 | 310 IF M=0 THEN IF D=0 THEN IF Y=0 THEN 1590 31 | 315 PRINT \ PRINT "IS THIS THE DATE YOU WAS BORN ON"; \ INPUT I$ 32 | 317 LET I$=SEG$(I$,1,1) 33 | 320 IF M=2 THEN IF D>29 THEN PRINT "NO SUCH DAY IN FEBRUARY, TRY AGAIN" \ GO TO 290 34 | 330 IF M>12 THEN PRINT "NO SUCH MONTH, TRY AGAIN" \ GO TO 290 35 | 340 IF D>31 THEN PRINT "NO SUCH DAY, TRY AGAIN" \ GO TO 290 36 | 350 PRINT 37 | 360 IF Y-75>0 THEN 380 38 | 370 LET Y=Y+1900 39 | 380 LET I1=INT((Y-1500)/100) 40 | 390 IF Y-1582<0 THEN 1310 41 | 400 LET A=I1*5+(I1+3)/4 42 | 410 LET I2=INT(A-FNB(A)*7) 43 | 420 LET Y2=INT(Y/100) 44 | 430 LET Y3=INT(Y-Y2*100) 45 | 440 LET A=Y3/4+Y3+D+T(M)+I2 46 | 450 LET B=INT(A-FNB(A)*7)+1 47 | 460 IF M>2 THEN 570 48 | 470 IF Y3=0 THEN 540 49 | 480 LET T1=INT(Y-FNA(Y)*4) 50 | 490 IF T1<>0 THEN 570 51 | 500 IF B<>0 THEN 520 52 | 510 LET B=6 53 | 520 LET B=B-1 54 | 530 GO TO 570 55 | 540 LET A=I1-1 56 | 550 LET T1=INT(A-FNA(A)*4) 57 | 560 IF T1=0 THEN 500 58 | 570 IF B<>0 THEN 590 59 | 580 LET B=7 60 | 590 IF (Y1*12+M1)*31+D1<(Y*12+M)*31+D THEN 650 61 | 600 IF (Y1*12+M1)*31+D1=(Y*12+M)*31+D THEN 630 62 | 610 PRINT M;"/";D;"/";Y;" WAS A "; 63 | 620 GO TO 660 64 | 630 PRINT M;"/";D;"/";Y;" IS A "; 65 | 640 GO TO 660 66 | 650 PRINT M;"/";D;"/";Y;" WILL BE A "; 67 | 660 IF B<>1 THEN 680 68 | 670 PRINT "SUNDAY" 69 | 680 IF B<>2 THEN 700 70 | 690 PRINT "MONDAY" 71 | 700 IF B<>3 THEN 720 72 | 710 PRINT "TUESDAY" 73 | 720 IF B<>4 THEN 740 74 | 730 PRINT "WEDNESDAY" 75 | 740 IF B<>5 THEN 760 76 | 750 PRINT "THURSDAY" 77 | 760 IF B<>6 THEN 780 78 | 770 GO TO 1260 79 | 780 IF B<>7 THEN 800 80 | 790 PRINT "SATURDAY" 81 | 800 IF (Y1*12+M1)*31+D1=(Y*12+M)*31+D THEN 1200 82 | 805 IF I$="N" THEN 1200 83 | 810 LET I5=Y1-Y 84 | 820 PRINT 85 | 830 LET I6=M1-M 86 | 840 LET I7=D1-D 87 | 850 IF I7>=0 THEN 880 88 | 860 LET I6=I6-1 89 | 870 LET I7=I7+30 90 | 880 IF I6>=0 THEN 910 91 | 890 LET I5=I5-1 92 | 900 LET I6=I6+12 93 | 910 IF I5<0 THEN 1340 94 | 920 IF I7<>0 THEN 950 95 | 930 IF I6<>0 THEN 950 96 | 940 PRINT "****HAPPY BIRTHDAY*****" 97 | 950 PRINT " "," ","YEARS","MONTHS","DAYS" 98 | 960 PRINT "YOUR AGE ",I5,I6,I7 99 | 970 LET A8=(I5*365)+(I6*30)+I7+INT(I6/2) 100 | 980 LET K5=I5 101 | 990 LET K6=I6 102 | 1000 LET K7=I7 103 | 1010 LET E=Y+65 104 | 1020 LET F=.35 105 | 1030 PRINT "YOU HAVE SLEPT ", 106 | 1040 GOSUB 1360 107 | 1050 LET F=.17 108 | 1060 PRINT "YOU HAVE EATEN ", 109 | 1070 GOSUB 1360 110 | 1080 LET F=.23 111 | 1090 IF K5>3 THEN 1120 112 | 1100 PRINT "YOU HAVE PLAYED ", 113 | 1110 GO TO 1160 114 | 1120 IF K5>9 THEN 1150 115 | 1130 PRINT "YOU HAVE PLAYED/STUDIED", 116 | 1140 GO TO 1160 117 | 1150 PRINT "YOU HAVE WORKED/STUDIED", 118 | 1160 GOSUB 1360 119 | 1170 PRINT "YOU HAVE RELAXED ",K5,K6,K7 120 | 1180 PRINT 121 | 1190 PRINT " ","** YOU MAY RETIRE IN";E;"**" 122 | 1200 PRINT 123 | 1210 FOR Q=1 TO 2 124 | 1220 PRINT 125 | 1230 NEXT Q 126 | 1240 PRINT 127 | 1250 GO TO 260 128 | 1260 IF D=13 THEN 1290 129 | 1270 PRINT "FRIDAY " 130 | 1275 IF I$="N" THEN 260 131 | 1280 GO TO 800 132 | 1290 PRINT "FRIDAY THE THIRTEENTH---BEWARE!" 133 | 1300 GO TO 800 134 | 1310 FOR I=1 TO 4 \ PRINT CHR$(7); \ NEXT I 135 | 1320 PRINT "NOT PREPARED TO GIVE DAY OF WEEK PRIOR TO THE YEAR 1582 -" 136 | 1330 PRINT "THE CURRENT CALENDER DID NOT EXIST BEFORE THAT YEAR." 137 | 1340 GO TO 1210 138 | 1350 DATA 0,3,3,6,1,4,6,2,5,0,3,5 139 | 1360 LET K1=INT(F*A8) 140 | 1370 LET I5=INT(K1/365) 141 | 1380 LET K1=K1-(I5*365) 142 | 1390 LET I6=INT(K1/30) 143 | 1400 LET I7=K1-(I6*30) 144 | 1410 LET K5=K5-I5 145 | 1420 LET K6=K6-I6 146 | 1430 LET K7=K7-I7 147 | 1440 IF K7>=0 THEN 1470 148 | 1450 LET K7=K7+30 149 | 1460 LET K6=K6-1 150 | 1470 IF K6>0 THEN 1500 151 | 1480 LET K6=K6+12 152 | 1490 LET K5=K5-1 153 | 1500 PRINT I5,I6,I7 154 | 1510 RETURN 155 | 1520 IF K6=12 THEN 1540 156 | 1530 GO TO 1170 157 | 1540 LET K5=K5+1 158 | 1550 LET K6=0 159 | 1560 GO TO 1170 160 | 1570 GO TO 1590 161 | 1580 PRINT E$"[H"E$"[2J" \ RETURN 162 | 1590 PRINT E$'[H'E$'[2J' 163 | 1600 FOR I=1 TO 11 \ PRINT \ NEXT I 164 | 1610 PRINT "******************** END OF PROGRAM ********************" 165 | 1620 END 166 | -------------------------------------------------------------------------------- /programs/demo.bas: -------------------------------------------------------------------------------- 1 | 10 REM BASIC PROGRAM TO GENERATE N TERMS OF A FIBONACCI SERIES, 2 | 20 REM THE FIRST TWO TERMS OF WHICH ARE SPECIFIED BY THE USER. 3 | 30 REM 4 | 40 REM PRINT THE IDENTIFYING MESSAGE 5 | 50 PRINT "PROGRAM TO GENERATE A FIBONACCI SERIES" 6 | 60 REM 7 | 70 REM GET THE LENGTH AND FIRST TWO TERMS OF THE SERIES 8 | 80 PRINT "HOW MANY TERMS DO YOU WANT GENERATED"; 9 | 90 INPUT L 10 | 100 IF L<>0 THEN 130 11 | 110 REM IF USER REQUESTS 0 TERMS, TERMINATE EXECUTION 12 | 120 STOP 13 | 130 PRINT "WHAT IS THE FIRST TERM"; 14 | 140 INPUT T1 15 | 150 PRINT "WHAT IS THE SECOND TERM"; 16 | 160 INPUT T2 17 | 170 REM MAKE SURE L IS NOT NEGATIVE OR TOO LARGE 18 | 180 IF L<3 THEN 200 19 | 190 IF L<50 THEN 220 20 | 200 PRINT L;"TERMS DO NOT REALLY MAKE SENSE," 21 | 210 GO TO 80 22 | 220 REM PRINT THE FIRST TWO TERMS OF THE SERIES 23 | 230 PRINT "THE REQUESTED SERIES IS" 24 | 240 PRINT T1 25 | 250 PRINT T2 26 | 260 L=L-2 27 | 270 REM CALCULATE NEXT TERM AND PRINT IT 28 | 280 N=T1+T2 29 | 290 T1=T2 30 | 300 T2=N 31 | 310 PRINT N 32 | 320 REM DETERMINE IF SERIES IS FINISHED. IF SO, DO NEXT ONE. 33 | 330 L=L-1 34 | 340 IF L<=0 THEN 80 35 | 350 GO TO 280 36 | 360 END 37 | -------------------------------------------------------------------------------- /programs/dice.bas: -------------------------------------------------------------------------------- 1 | 5 REM *** CONVERTED TO RSTS/E BY DAVID AHL, DIGITAL 2 | 10 REM -MATHDICE*** (BASIC PROGRAM BEGINS AT LINE 100) WAS PROGRAMMED 3 | 11 REM -BY JIM GERRISH, FOURTH GRADE TEACHER AT THE BERNICE A. RAY 4 | 12 REM -SCHOOL, HANOVER, NEW HAMPSHIRE. LAST CHANGE: 3/21/72. 5 | 13 REM 6 | 14 REM -PROGRAM PERFORMS PICTORAL DRILL ON ADDITION FACTS USING 7 | 15 REM -PRINTED DICE, NO READING INVOLVED. GOOD FOR BEGINNING 8 | 16 REM -ADDITION, SINCE ANSWER CAN BE DERRIVED FROM COUNTING SPOTS 9 | 17 REM -DICE AS WELL AS BY MEMORIZING MATH FACTS OR AWARENESS 10 | 18 REM -OF NUMBER CONCEPTS. 11 | 19 REM - 12 | 20 PRINT "THIS PROGRAM GENERATES SUCCESSIVE PICTURES OF TWO DICE." 13 | 21 PRINT "WHEN TWO DICE AND AN EQUAL SIGN FOLLOWED BY A QUESTION" 14 | 22 PRINT "MARK HAVE BEEN PRINTED, TYPE YOUR ANSWER AND THE RETURN KEY." 15 | 23 PRINT "To CONCLUDE THE LESSON, TYPE -1 AS YOUR ANSWER." 16 | 24 PRINT 17 | 25 PRINT 18 | 100 RANDOMIZE 19 | 105 LET N=N+1 20 | 110 LET D=INT(RND*6+1) 21 | 120 PRINT "+-----+" 22 | 130 IF D=1 THEN 200 23 | 140 IF D=2 THEN 180 24 | 150 IF D=3 THEN 180 25 | 160 PRINT "| * * |" 26 | 170 GOTO 210 27 | 180 PRINT "| * |" 28 | 190 GOTO 210 29 | 200 PRINT "| |" 30 | 210 IF D=2 THEN 260 31 | 220 IF D=4 THEN 260 32 | 230 IF D=6 THEN 270 33 | 240 PRINT "| * |" 34 | 250 GOTO 280 35 | 260 PRINT "| |" 36 | 265 GOTO 280 37 | 270 PRINT "| * * |" 38 | 280 IF D=1 THEN 350 39 | 290 IF D=2 THEN 330 40 | 300 IF D=3 THEN 330 41 | 310 PRINT "| * * |" 42 | 320 GOTO 360 43 | 330 PRINT "| * |" 44 | 340 GOTO 360 45 | 350 PRINT "| |" 46 | 360 PRINT "+-----+" 47 | 370 PRINT 48 | 375 IF N=2 THEN 500 49 | 380 PRINT " +" 50 | 381 PRINT 51 | 400 LET A=D 52 | 410 GOTO 100 53 | 500 LET T=D+A 54 | 510 PRINT " = "; 55 | 520 INPUT T1 56 | 530 IF T1=T THEN 590 57 | 535 if t1<0 then 800 58 | 540 PRINT "NO, COUNT THE SPOTS AND GIVE ANOTHER ANSWER." 59 | 541 PRINT " = "; 60 | 550 INPUT T2 61 | 560 IF T2=T THEN 590 62 | 570 PRINT "NO, THE ANSWER IS ";T 63 | 580 GOTO 600 64 | 590 PRINT "RIGHT!" 65 | 600 PRINT 66 | 601 PRINT "THE DICE ROLL AGAIN....." 67 | 610 PRINT 68 | 615 LET N=0 69 | 620 GOTO 100 70 | 800 PRINT 71 | 810 PRINT "BYE BYE FOR NOW. COME AND PLAY AGAIN LATER." 72 | 900 END 73 | -------------------------------------------------------------------------------- /programs/example1.bas: -------------------------------------------------------------------------------- 1 | 100 REM Program to calculate E by an infinite series 2 | 110 LET E=1 3 | 120 LET E0=E 4 | 130 LET I=I+1 5 | 140 LET D=1 6 | 150 FOR J=1 TO I 7 | 160 LET D=D*J 8 | 170 NEXT J 9 | 180 LET E=E+1/D 10 | 190 PRINT E 11 | 200 IF ABS(E-E0)>1.00000E-07 GO TO 120 12 | 210 END 13 | -------------------------------------------------------------------------------- /programs/example2.bas: -------------------------------------------------------------------------------- 1 | 50 REM Program to round off decimal numbers 2 | 100 PRINT "What number do you wish to round off"; 3 | 110 INPUT N 4 | 120 PRINT "To how many places"; 5 | 130 INPUT Y 6 | 140 PRINT 7 | 150 LET A=INT(N*10^Y+0.5)/(10^Y) 8 | 160 PRINT N "=" A "to" Y "decimal places." 9 | 170 PRINT 10 | 180 GO TO 100 11 | 190 END 12 | -------------------------------------------------------------------------------- /programs/geowar.bas: -------------------------------------------------------------------------------- 1 | 1 REM *** GEOWAR 2 | 2 REM *** WRITTEN BY GARY LORENC, IDEA BY KENNETH JANOWIAK 3 | 3 REM *** ST. PATRICK HS, 5900 W. BELMONT AVE, CHICAGO, ILL 4 | 4 REM *** UPDATED TO BASIC-PLUS BY DAVE AHL, DIGITAL PDP-11/45 GROUP 5 | 5 PRINT"DO YOU WANT A DESCRIPTION OF THE GAME? (1-YES,0-NO) "; 6 | 6 INPUT I 7 | 7 IF I=0 THEN 46 8 | 8 PRINT 9 | 9 PRINT" THE FIRST QUADRANT OF A REGULAR COORDINATE GRAPH WILL"; 10 | 10 PRINT" SERVE AS" 11 | 11 PRINT"THE BATTLEFIELD. FIVE ENEMY INSTALLATIONS ARE LOCATED "; 12 | 12 PRINT"WITHIN A" 13 | 13 PRINT"30 BY 30 UNIT AREA. NO TARGET IS INSIDE THE 10 BY 10 "; 14 | 14 PRINT"UNIT AREA" 15 | 15 PRINT"ADJACENT TO THE ORIGIN, AS THIS IS THE LOCATION OF OUR "; 16 | 16 PRINT"BASE. WHEN" 17 | 17 PRINT"THE MACHINE ASKS FOR THE DEGREE OF THE SHOT, RESPOND "; 18 | 18 PRINT"WITH A NUMBER" 19 | 19 PRINT"BETWEEN 1 AND 90." 20 | 20 PRINT 21 | 21 PRINT TAB(51),"SCARE**********" 22 | 22 PRINT" 1. A DIRECT HIT IS A HIT WITHIN 1 DEGREE OF"; 23 | 23 PRINT TAB(51),"* *" 24 | 24 PRINT" THE TARGET.",TAB(51),"* HIT****** *" 25 | 25 PRINT" 2. A HIT MUST PASS BETWEEN THE FIRST SET OF"; 26 | 26 PRINT TAB(51),"* * * *" 27 | 27 PRINT" INTEGRAL POINTS NW AND SE OF THE TARGET."; 28 | 28 PRINT TAB(51),"* * D * *" 29 | 29 PRINT" 3. A SCARE MUST PASS BETWEEN THE NEXT SET OF"; 30 | 30 PRINT TAB(51),"* * * *" 31 | 31 PRINT" INTEGRAL POINTS NW AND SE OF THE TARGET,"; 32 | 32 PRINT TAB(51),"* ******HIT *" 33 | 33 PRINT" AND CAUSES THE ENEMY TO RELOCATE A "; 34 | 34 PRINT TAB(51),"* *" 35 | 35 PRINT" MAXIMUM OF 1 UNIT IN ANY DIRECTION."; 36 | 36 PRINT TAB(51),"**********SCARE" 37 | 37 PRINT 38 | 38 PRINT 39 | 39 PRINT" MISSILES HAVE INFINITE RANGE AND MAY HIT MORE THAN "; 40 | 40 PRINT"ONE TARGET." 41 | 41 PRINT"A MISSILE THAT NEARLY MISSES AN INSTALLATION (A SCARE) "; 42 | 42 PRINT"WILL BE" 43 | 43 PRINT"IMMEDIATELY SHOT DOWN. ANY HITS BEFORE THIS TIME WILL "; 44 | 44 PRINT"NOT BE COUNTED" 45 | 45 PRINT"UNLESS A DIRECT HIT WAS MADE." 46 | 46 PRINT 47 | 48 PRINT"READY TO GO? (1-YES,0-NO) "; 48 | 49 INPUT R2 49 | 50 IF R2=0 THEN 999 50 | 51 PRINT"GOOD LUCK!" 51 | 52 PRINT 52 | 53 DIM C(10),H(20),D(10),S(20),F(5) 53 | 54 DEF FNV(V1)=INT((180/3.14159)*ATN(V1)+.5) 54 | 55 X=250 55 | 56 X1=RND(X) 56 | 57 G2=0 57 | 58 S2=0 58 | 59 D2=0 59 | 60 H2=0 60 | 61 FOR K=1 TO 10 61 | 62 GO SUB 154 62 | 63 IF INT(K/2)<>K/2 THEN 70 63 | 64 IF C(K-1)>10 THEN 70 64 | 65 IF C(K)>10 THEN 70 65 | 66 FOR L=K-1 TO K 66 | 67 GO SUB 154 67 | 68 NEXT L 68 | 69 GO TO 63 69 | 70 NEXT K 70 | 71 S=0 71 | 72 FOR L=1 TO 5 72 | 73 D(L)=FNV(C(2*L)/C(2*L-1)) 73 | 74 NEXT L 74 | 75 A=2 75 | 76 L1=10 76 | 77 T5=5 77 | 78 D5=0 78 | 79 H5=0 79 | 80 GO SUB 147 80 | 81 PRINT 81 | 82 PRINT"ENTER DEGREE OF SHOT "; 82 | 83 D1=0 83 | 84 H1=0 84 | 85 FOR Q=1 TO 5 85 | 86 F(Q)=20 86 | 87 NEXT Q 87 | 88 INPUT D 88 | 89 IF D>=90 THEN 81 89 | 90 IF D<0 THEN 177 ELSE IF D=0 THEN 999 90 | 91 S=S+1 91 | 92 FOR A=2 TO 10 STEP 2 92 | 93 IF D>S(A) THEN 103 93 | 94 IF DH(A) THEN 105 95 | 96 IF DD(A/2)+1 THEN 101 97 | 98 IF D0 THEN 118 105 | 106 GO SUB 138 106 | 107 GO TO 81 107 | 108 IF D1+H1<>0 THEN 112 108 | 109 IF T5=1 THEN 159 109 | 110 PRINT"NO LUCK -- TRY AGAIN." 110 | 111 GO TO 81 111 | 112 IF D1>0 THEN 118 112 | 113 IF H1>1 THEN 116 113 | 114 PRINT"**CONGRATULATIONS** A HIT." 114 | 115 GO TO 124 115 | 116 PRINT"**CONGRATULATIONS**";H1;" HITS." 116 | 117 GO TO 124 117 | 118 PRINT"****BULLS EYE**** "; 118 | 119 IF D1>1 THEN 123 119 | 120 IF H1>0 THEN 123 120 | 121 PRINT" A DIRECT HIT!" 121 | 122 GO TO 124 122 | 123 PRINT D1+H1;" HITS -- A DIRECT HIT ON";D1;" OF THEM!" 123 | 124 T5=T5-(D1+H1) 124 | 125 D5=D5+D1 125 | 126 H5=H5+H1 126 | 127 IF T5=0 THEN 167 127 | 128 FOR J= 1 TO H1+D1 128 | 129 Z=F(J) 129 | 130 D(Z/2)=0 130 | 131 H(Z)=0 131 | 132 H(Z-1)=0 132 | 133 S(Z)=0 133 | 134 S(Z-1)=0 134 | 135 NEXT J 135 | 136 PRINT 5-T5;" DOWN --";T5;" TO GO." 136 | 137 GO TO 81 137 | 138 PRINT"A NEAR HIT. ENEMY HAS RELOCATED." 138 | 139 FOR R=1 TO 2 139 | 140 X2=INT(RND(0)*100) 140 | 141 IF ABS(C(A-(R-1))-X2)>1 THEN 140 141 | 142 IF C(A-(R-1))<=2 THEN 140 142 | 143 C(A-(R-1))=X2 143 | 144 NEXT R 144 | 145 D(A/2)=FNV(C(A)/C(A-1)) 145 | 146 L1=A 146 | 147 FOR I=A TO L1 STEP 2 147 | 148 H(I-1)=FNV((C(I)-1)/(C(I-1)+1)) 148 | 149 H(I)=FNV((C(I)+1)/(C(I-1)-1)) 149 | 150 S(I-1)=FNV((C(I)-2)/(C(I-1)+2)) 150 | 151 S(I)=FNV((C(I)+2)/(C(I-1)-2)) 151 | 152 NEXT I 152 | 153 RETURN 153 | 154 R=INT(RND(0)*100) 154 | 155 IF R>30 THEN 154 155 | 156 IF R<3 THEN 154 156 | 157 C(K)=R 157 | 158 RETURN 158 | 159 FOR Z1=1 TO 5 159 | 160 IF D(Z1)>1 THEN 162 160 | 161 NEXT Z1 161 | 162 IF D6 THEN 117 13 | 116 GO TO 120 14 | 117 IF N<20 THEN 300 15 | 120 PRINT "I SAID, THE MINIMUM SIZE IS 7, AND THE MAXIMUM IS 19."\GO TO 110 16 | 210 FOR I=1 TO N\FOR J=1 TO N\A(X,Y)=0\NEXT J\NEXT I 17 | 300 PRINT \PRINT "WE ALTERNATE MOVES. YOU GO FIRST..."\PRINT 18 | 310 PRINT "YOUR PLAY (I,J)";\INPUT I,J 19 | 320 IF I=-1 THEN 980 20 | 330 X=I\Y=J\GOSUB 910 \IF L=1 THEN 410 21 | 340 PRINT "ILLEGAL MOVE. TRY AGAIN..."\GO TO 310 22 | 410 IF A(I,J)=0 THEN 440 23 | 420 PRINT "SQUARE OCCUPIED. TRY AGAIN..."\GO TO 310 24 | 440 A(I,J)=1 25 | 500 REM *** COMPUTER TRIES AN 'INTELLIGENT' MOVE *** 26 | 510 FOR E=-1 TO 1\FOR F=-1 TO 1\IF E+F-E*F=0 THEN 590 27 | 540 LET X=I+E\LET Y=J+F\GOSUB 910 28 | 570 IF L=0 THEN 590 29 | 580 IF A(X,Y)=1 THEN 710 30 | 590 NEXT F\NEXT E 31 | 600 REM *** COMPUTER TRIES A RANDOM MOVE *** 32 | 610 LET X=INT(N*RND(0))+1\LET Y=INT(RND(0))+1\GOSUB 910 \IF L=0 THEN 610 33 | 650 IF A(X,Y)<>0 THEN 610 34 | 660 A(X,Y)=2\GOSUB 810 \GO TO 310 35 | 710 X=I-E\Y=J-F\GOSUB 910 36 | 750 IF L=0 THEN 610 37 | 760 GO TO 650 38 | 800 REM *** PRINT THE BOARD *** 39 | 810 FOR I=1 TO N\FOR J=1 TO N\PRINT A(I,J); 40 | 840 NEXT J 41 | 850 PRINT 42 | 860 NEXT I 43 | 870 PRINT 44 | 880 RETURN 45 | 900 REM *** CHECK WHETHER MOVE IS LEGAL *** 46 | 910 L=1\IF X<1 THEN 970 47 | 920 IF X>N THEN 970 48 | 930 IF Y<1 THEN 970 49 | 940 IF Y>N THEN 970 50 | 950 RETURN 51 | 970 LET L=0\RETURN 52 | 980 PRINT \PRINT "THANKS FOR THE GAME!!" 53 | 985 PRINT "PLAY AGAIN (1 FOR YES, 0 FOR NO)";\INPUT Q 54 | 990 IF Q=1 THEN 110 55 | 999 END 56 | -------------------------------------------------------------------------------- /programs/guess.bas: -------------------------------------------------------------------------------- 1 | 1 REM*******COPYRIGHT 1972 PEOPLE'S COMPUTER COMPANY*** 2 | 2 REM *** MENLO PARK 3 | 5 RANDOMIZE 4 | 10 LET G=6 5 | 20 LET N=100 6 | 30 REM-TRAP 7 | 40 REM-STEVE ULLMAN, 8-1-72 8 | 50 PRINT "WANT INSTRUCTIONS (1 FOR YES)"; 9 | 60 INPUT Z 10 | 70 IF Z<>1 THEN 180 11 | 80 PRINT "I AM THINKING OF A NUMBER BETWEEN 1 AND";N 12 | 90 PRINT "TRY TO GUESS MY NUMBER. ON EACH GUESS," 13 | 100 PRINT "YOU ARE TO ENTER 2 NUMBERS, TRYING TO TRAP" 14 | 110 PRINT "MY NUMBER BETWEEN THE TWO NUMBERS. I WILL" 15 | 120 PRINT "TELL YOU IF YOU HAVE TRAPPED MY NUMBER, IF MY" 16 | 130 PRINT "NUMBER IS LARGER THAN YOUR TWO NUMBERS, OR IF" 17 | 140 PRINT "MY NUMBER IS SMALLER THAN YOUR TWO NUMBERS." 18 | 150 PRINT "IF YOU WANT TO GUESS ONE SINGLE NUMBER, TYPE" 19 | 160 PRINT "YOUR GUESS FOR BOTH YOUR TRAP NUMBERS." 20 | 170 PRINT "YOU GET";G;"GUESSES TO GET MY NUMBER." 21 | 180 LET X=INT(N*RND(0))+1 22 | 190 FOR Q=1 TO G 23 | 200 PRINT 24 | 210 PRINT "GUESS #";Q; 25 | 220 INPUT A,B 26 | 230 IF A<>B THEN 240 27 | 235 IF X=A THEN 400 28 | 240 IF A <= B THEN 260 29 | 250 GOSUB 320 30 | 260 IF A>X THEN 270 31 | 265 IF X<=B THEN 320 32 | 270 IF XN THEN 60 14 | 55 PRINT "TOO LOW" 15 | 56 GO TO 30 16 | 60 PRINT "TOO HIGH" 17 | 65 GO TO 30 18 | 70 PRINT "CORRECT IN";C;"GUESSES." 19 | 75 IF C>3 THEN 90 20 | 80 PRINT "YOU WERE LUCKY!" 21 | 85 STOP 22 | 90 IF C>7 THEN 100 23 | 95 PRINT "GOOD JOB." 24 | 98 GOTO 105 25 | 100 PRINT "BUT YOU SHOULDN'T NEED MORE THAN 7 GUESSES." 26 | 105 PRINT \PRINT "LET'S PLAY AGAIN" 27 | 110 PRINT "I'M THINKING OF ANOTHER NUMBER"\GOTO 20 28 | 999 END 29 | -------------------------------------------------------------------------------- /programs/gunner.bas: -------------------------------------------------------------------------------- 1 | 10 REM *** MODIFIED AND CONVERTED TO RSTS/E BY DAVID AHL, DIGITAL 2 | 90 RANDOMIZE 3 | 100 PRINT "THIS COMPUTER DEMONSTRATION SIMULATES THE" 4 | 110 PRINT"RESULTS OF FIRING A FIELD ARTILLERY WEAPON." 5 | 120 PRINT 6 | 130 PRINT"YOU ARE THE OFFICER-IN-CHARGE, GIVING ORDERS TO THE GUN" 7 | 140 PRINT"CREW, TELLING THEM THE DEGREES OF ELEVATION YOU ESTIMATE" 8 | 150 PRINT"WILL PLACE THE PROJECTILE ON TARGET. A HIT WITHIN 100 YARDS" 9 | 160 PRINT "OF THE TARGET WILL DESTROY IT. TAKE MORE THAN 5 SHOTS," 10 | 170 PRINT "AND THE ENEMY WILL DESTROY YOU!"\PRINT 11 | 180 PRINT"MAXIMUM RANGE OF YOUR GUN IS 46500 YARDS." 12 | 185 Z=0 13 | 190 PRINT 14 | 195 S1=0 15 | 200 LET T=43000-30000*RND(X) 16 | 210 LET S=0 17 | 220 GO TO 370 18 | 230 PRINT"MINIMUM ELEVATION OF GUN IS ONE DEGREE." 19 | 240 GO TO 390 20 | 250 PRINT"MAXIMUM ELEVATION OF GUN IS 89 DEGREES." 21 | 260 GO TO 390 22 | 270 PRINT"OVER TARGET BY";ABS(E);"YARDS." 23 | 280 GO TO 390 24 | 290 PRINT "SHORT OF TARGET BY";ABS(E);"YARDS." 25 | 300 GO TO 390 26 | 310 GO TO 320 27 | 320 PRINT"***TARGET DESTROYED*** ";S;"ROUNDS OF AMMUNITION EXPENDED" 28 | 322 GOSUB 600 29 | 325 S1=S1+S 30 | 330 IF Z=4 THEN 490 31 | 340 Z=Z+1 32 | 345 PRINT 33 | 350 PRINT"THE FORWARD OBSERVER HAS SIGHTED MORE ENEMY ACTIVITY." 34 | 360 GO TO 200 35 | 370 PRINT" DISTANCE TO THE TARGET IS";INT(T);"YARDS....." 36 | 380 PRINT 37 | 390 PRINT 38 | 400 PRINT"ELEVATION:"; 39 | 410 INPUT B 40 | 420 IF B>89 THEN 250 41 | 430 IF B<1 THEN 230 42 | 440 LET S=S+1 43 | 442 IF S<6 THEN 450 44 | 444 PRINT\PRINT "BOOM !!! YOU HAVE JUST BEEN DESTROYED "; 45 | 445 GOSUB 600 46 | 446 PRINT "BY THE ENEMY"\PRINT\PRINT\GOTO 495 47 | 450 LET B2=2*B/57.3\LET I=46500*SIN(B2)\LET X=T-I\LET E=INT(X) 48 | 460 IF ABS(E)<100 THEN 310 49 | 470 IF E>100 THEN 290 50 | 480 IF E<-100 THEN 270 51 | 490 PRINT\PRINT\PRINT "TOTAL ROUNDS EXPENDED WERE";S1 52 | 491 IF S1>15 THEN 495\PRINT "NICE SHOOTING !!"\GOSUB 600\GOTO 500 53 | 495 PRINT "BETTER GO BACK TO FORT SILL FOR REFRESHER TRAINING!" 54 | 500 PRINT\PRINT "THANK YOU FOR PLAYING!" 55 | 505 PRINT\PRINT "TRY AGAIN....."\PRINT\GOTO 180 56 | 600 FOR N=1 TO 10\PRINT CHR$(7);\NEXT N 57 | 610 RETURN 58 | 999 END 59 | -------------------------------------------------------------------------------- /programs/hamurs.bas: -------------------------------------------------------------------------------- 1 | 100 PRINT "YOU ARE THE RULER OF THE ANCIENT KINGDOM OF SUMERIA." 2 | 101 PRINT "YOUR PEOPLE CALL YOU 'HAMURABI THE WISE'. YOUR TASK IS" 3 | 102 PRINT "TO DEVELOP A STABLE ECONOMY BY THE WISE MANAGEMENT OF" 4 | 103 PRINT "YOUR RESOURCES. YOU WILL BE BESET FROM TIME TO TIME" 5 | 104 PRINT "BY NATURAL EVENTS. THE ONLY HELP I CAN GIVE YOU IS THE " 6 | 105 PRINT "FACT THAT IT TAKES 2 BUSHELS OF GRAIN AS SEED TO PLANT" 7 | 106 PRINT "AN ACRE. MAY YOU JUDGE WELL, ALKNOWING HAMURABI." 8 | 107 PRINT "***********HAMURABI IS HERE***********" 9 | 110 P=95 10 | 111 S=2800 11 | 112 H=3000 12 | 113 E=H-S 13 | 114 Y=3 14 | 115 A=H/Y 15 | 116 I=5 16 | 117 Q=1 17 | 210 D=0 18 | 215 PRINT 19 | 217 PRINT "LAST YEAR"D"PEOPLE STARVED,"I"CAME TO THE CITY" 20 | 218 P=P+I 21 | 227 IF Q>0 THEN 230 22 | 228 P=INT(P/2) 23 | 229 PRINT "HALF DIED OF THE PLAGUE" 24 | 230 PRINT "POPULATION IS NOW"P 25 | 232 PRINT "CITY OWNS"A"ACRES,"Y"BUSHELS HARVESTED PER ACRE" 26 | 250 PRINT "RATS DESTROYED"E"BUSHELS,"S"BUSHELS IN STORE" 27 | 260 PRINT \PRINT "DO YOU WISH TO ABDICATE"; 28 | 270 INPUT B$\PRINT 29 | 280 IF B$="NO" THEN 310 \IF B$<>"YES" THEN 260 30 | 290 STOP 31 | 310 C=INT(10*RND(0)) 32 | 311 Y=C+17 33 | 312 PRINT "LAND COSTS"Y"BUSHELS PER ACRE" 34 | 320 PRINT "BUY"; 35 | 321 INPUT Q 36 | 322 IF Y*Q=10*P THEN 452 66 | 510 S=S-INT(D/2) 67 | 511 GOSUB 800 68 | 512 Y=C 69 | 513 H=D*Y 70 | 520 E=0 71 | 521 GOSUB 800 72 | 522 IF INT(C/2)<>C/2 THEN 530 73 | 523 E=INT(S/C) 74 | 530 S=S-E+H 75 | 531 GOSUB 800 76 | 532 I=INT(C*(20*A+S)/P/100+1) 77 | 540 C=INT(Q/20) 78 | 541 Q=INT(10*(2*RND(0)-1)) 79 | 550 IF P=N THEN PRINT "YOU DID ALL THE WORDS!!" \ STOP 13 | 130 Q=INT(N*RND+1) 14 | 140 IF U(Q)=1 THEN 130 15 | 150 U(Q)=1 \ C=C+1 \ RESTORE \ T1=0 16 | 160 FOR I=1 TO Q \ READ A$ \ NEXT I 17 | 170 L=LEN(A$) \ FOR I=1 TO L \ L$(I)=SEG$(A$,I,I) \ NEXT I 18 | 180 PRINT "HERE ARE THE LETTERS YOU USED:" 19 | 190 FOR I=1 TO 26 \ PRINT N$(I); \ IF N$(I+1)="" THEN 210 20 | 200 PRINT ","; \ NEXT I 21 | 210 PRINT \ PRINT \ FOR I=1 TO L \ PRINT D$(I); \ NEXT I \ PRINT \ PRINT 22 | 220 PRINT "WHAT IS YOUR GUESS"; \ INPUT G$ \ R=0 23 | 230 FOR I=1 TO 26 \ IF N$(I)="" THEN 260 24 | 240 IF G$=N$(I) THEN PRINT "YOU GUESSED THAT LETTER BEFORE" \ GO TO 180 25 | 250 NEXT I \ PRINT "PROGRAM ERROR. RUN AGAIN." \ STOP 26 | 260 N$(I)=G$ \ T1=T1+1 27 | 270 FOR I=1 TO L \ IF L$(I)=G$ THEN D$(I)=G$ \ R=R+1 28 | 280 NEXT I \ IF R=0 THEN M=M+1 \ GO TO 410 29 | 310 FOR I=1 TO L \ IF D$(I)="-" THEN 330 30 | 320 NEXT I \ GO TO 400 31 | 330 PRINT \ FOR I=1 TO L \ PRINT D$(I); \ NEXT I \ PRINT \ PRINT 32 | 340 PRINT "WHAT IS YOUR GUESS FOR THE WORD"; \ INPUT B$ 33 | 350 IF B$=A$ THEN 370 34 | 360 PRINT "WRONG. TRY ANOTHER LETTER." \ PRINT \ GO TO 180 35 | 370 PRINT "RIGHT!! IT TOOK YOU";T1;"GUESSES!" 36 | 380 PRINT "WANT ANOTHER WORD"; \ INPUT W$ \ IF W$="YES" THEN 70 37 | 390 PRINT \ PRINT "IT'S BEEN FUN! BYE FOR NOW." \ STOP 38 | 400 PRINT "YOU FOUND THE WORD!" \ GO TO 380 39 | 410 PRINT \ PRINT \ PRINT "SORRY, THAT LETTER ISN'T IN THE WORD." 40 | 420 ON M GO TO 430,440,450,460,470,480,490,500,510,520 41 | 430 PRINT "FIRST, WE DRAW A HEAD" \ GO TO 530 42 | 440 PRINT "NOW WE DRAW A BODY" \ GO TO 530 43 | 450 PRINT "NEXT WE DRAW AN ARM" \ GO TO 530 44 | 460 PRINT "THIS TIME IT'S THE OTHER ARM" \ GO TO 530 45 | 470 PRINT "NOW, LET'S DRAW THE RIGHT LEG" \ GO TO 530 46 | 480 PRINT "THIS TIME WE DRAW THE LEFT LEG" \ GO TO 530 47 | 490 PRINT "NOW WE PUT UP A HAND" \ GO TO 530 48 | 500 PRINT "NEXT THE OTHER HAND" \ GO TO 530 49 | 510 PRINT "NOW WE DRAW ONE FOOT" \ GO TO 530 50 | 520 PRINT "HERE'S THE OTHER FOOT -- YOU'RE HUNG!!" 51 | 530 ON M GO TO 540,560,570,580,590,600,610,620,630,640 52 | 540 P$(3,6)="-" \ P$(3,7)="-" \ P$(3,8)="-" \ P$(4,5)="(" \ P$(4,6)="." 53 | 550 P$(4,8)="." \ P$(4,9)=")" \ P$(5,6)="-" \ P$(5,7)="-" \ P$(5,8)="-" \ GO TO 650 54 | 560 FOR I=6 TO 9 \ P$(I,7)="X" \ NEXT I \ GO TO 650 55 | 570 FOR I=4 TO 7 \ P$(I,I-1)="\" \ NEXT I \ GO TO 650 56 | 580 P$(4,11)="/" \ P$(5,10)="/" \ P$(6,9)="/" \ P$(7,8)="/" \ GO TO 650 57 | 590 P$(10,6)="/" \ P$(11,5)="/" \ GO TO 650 58 | 600 P$(10,8)="\" \ P$(11,9)="\" \ GO TO 650 59 | 610 P$(3,11)="\" \ GO TO 650 60 | 620 P$(3,3)="/" \ GO TO 650 61 | 630 P$(12,10)="\" \ P$(12,11)="-" \ GO TO 650 62 | 640 P$(12,3)="-" \ P$(12,4)="/" 63 | 650 FOR I=1 TO 12 \ FOR J=1 TO 12 \ PRINT P$(I,J); \ NEXT J 64 | 660 PRINT \ NEXT I \ PRINT \ PRINT \ IF M<>10 THEN 180 65 | 670 PRINT "SORRY, YOU LOSE. THE WORD WAS ";A$ 66 | 680 PRINT "YOU MISSED THAT ONE. DO YOU" \ GO TO 380 67 | 690 DATA "GUM","SIN","FOR","CRY","LUG","BYE","FLY" 68 | 700 DATA "UGLY","EACH","FROM","WORK","TALK","WITH","SELF" 69 | 710 DATA "PIZZA","THING","FEIGN","FIEND","ELBOW","FAULT","DIRTY" 70 | 720 DATA "BUDGET","SPIRIT","QUAINT","MAIDEN","ESCORT","PICKAX" 71 | 730 DATA "EXAMPLE","TENSION","QUININE","KIDNEY","REPLICA","SLEEPER" 72 | 740 DATA "TRIANGLE","KANGAROO","MAHOGANY","SERGEANT","SEQUENCE" 73 | 750 DATA "MOUSTACHE","DANGEROUS","SCIENTIST","DIFFERENT","QUIESCENT" 74 | 760 DATA "MAGISTRATE","ERRONEOUSLY","LOUDSPEAKER","PHYTOTOXIC" 75 | 770 DATA "MATRIMONIAL","PARASYMPATHOMIMETIC","THIGMOTROPISM" 76 | 780 END 77 |  -------------------------------------------------------------------------------- /programs/hiq.bas: -------------------------------------------------------------------------------- 1 | 10 REM *** WRITTEN BY CHARLES LUND, AMERICAN SCHOOL, THE HAGUE, NETHERLANDS 2 | 20 REM *** MODIFIED AND CONVERTED TO RSTS/E BY DAVID AHL, DIGITAL 3 | 30 DIM B(70),T(9,9) 4 | 40 PRINT "THIS IS THE GAME OF HI-Q" \ PRINT "HERE IS THE BOARD" \ PRINT 5 | 50 PRINT " ! ! !" 6 | 60 PRINT " 13 14 15" \ PRINT 7 | 70 PRINT " ! ! !" 8 | 80 PRINT " 22 23 24" \ PRINT 9 | 90 PRINT "! ! ! ! ! ! !" 10 | 100 PRINT "29 30 31 32 33 34 35" \ PRINT 11 | 110 PRINT "! ! ! ! ! ! !" 12 | 120 PRINT "38 39 40 41 42 43 44" \ PRINT 13 | 130 PRINT "! ! ! ! ! ! !" 14 | 140 PRINT "47 48 49 50 51 52 53" \ PRINT 15 | 150 PRINT " ! ! !" 16 | 160 PRINT " 58 59 60" \ PRINT 17 | 170 PRINT " ! ! !" 18 | 180 PRINT " 67 68 69" \ PRINT 19 | 190 PRINT "TO SAVE TYPING TIME, A COMPRESSED VERSION OF THE GAME BOARD" 20 | 200 PRINT "WILL BE USED DURING PLAY. REFER TO THE ABOVE ONE FOR PEG" 21 | 210 PRINT "NUMBERS. O.K., LET'S BEGIN..." 22 | 220 REM *** SET UP BOARD 23 | 230 FOR R=1 TO 9 24 | 240 FOR C=1 TO 9 25 | 250 IF (R-4)*(R-5)*(R-6)=0 THEN 290 26 | 260 IF (C-4)*(C-5)*(C-6)=0 THEN 290 27 | 270 T(R,C)=-5 28 | 280 GO TO 310 29 | 290 IF (R-1)*(C-1)*(R-9)*(C-9)=0 THEN 270 30 | 300 T(R,C)=5 31 | 310 NEXT C 32 | 320 NEXT R 33 | 330 T(5,5)=0 \ GOSUB 550 34 | 340 REM *** INPUT MOVE AND CHECK ON LEGALITY 35 | 350 FOR W=1 TO 33 36 | 360 READ M 37 | 370 DATA 13,14,15,22,23,24,29,30,31,32,33,34,35,38,39,40,41 38 | 380 DATA 42,43,44,47,48,49,50,51,52,53,58,59,60,67,68,69 39 | 390 B(M)=-7 \ NEXT W 40 | 400 B(41)=-3 41 | 410 PRINT "MOVE WHICH PIECE"; \ INPUT Z 42 | 420 IF B(Z)=-7 THEN 440 43 | 430 PRINT "ILLEGAL MOVE, TRY AGAIN..." \ GO TO 410 44 | 440 PRINT "TO WHERE"; \ INPUT P 45 | 450 IF B(P)=0 THEN 430 46 | 460 IF B(P)=-7 THEN 430 47 | 470 IF Z=P THEN 410 48 | 480 IF ((Z+P)/2)=INT((Z+P)/2) THEN 500 49 | 490 GO TO 430 50 | 500 IF (ABS(Z-P)-2)*(ABS(Z-P)-18)<>0 THEN 430 51 | 510 GOSUB 720 52 | 520 GOSUB 550 53 | 530 GOSUB 980 54 | 540 GO TO 410 55 | 550 REM *** PRINT BOARD 56 | 560 FOR X=1 TO 9 57 | 570 FOR Y=1 TO 9 58 | 580 IF (X-1)*(X-9)*(Y-1)*(Y-9)=0 THEN 610 59 | 590 IF (X-4)*(X-5)*(X-6)=0 THEN 630 60 | 600 IF (Y-4)*(Y-5)*(Y-6)=0 THEN 630 61 | 610 REM 62 | 620 GO TO 670 63 | 630 IF T(X,Y)<>5 THEN 660 64 | 640 PRINT TAB(Y*2);"!"; 65 | 650 GO TO 670 66 | 660 PRINT TAB(Y*2);"O"; 67 | 670 REM 68 | 680 NEXT Y 69 | 690 PRINT 70 | 700 NEXT X 71 | 710 RETURN 72 | 720 REM *** UPDATE BOARD 73 | 730 C=1 \ FOR X=1 TO 9 74 | 740 FOR Y=1 TO 9 75 | 750 IF C<>Z THEN 940 76 | 760 IF C+2<>P THEN 810 77 | 770 IF T(X,Y+1)=0 THEN 430 78 | 780 T(X,Y+2)=5 79 | 790 T(X,Y+1)=0 \ B(C+1)=-3 80 | 800 GO TO 920 81 | 810 IF C+18<>P THEN 850 82 | 820 IF T(X+1,Y)=0 THEN 430 83 | 830 T(X+2,Y)=5 \ T(X+1,Y)=0 \ B(C+9)=-3 84 | 840 GO TO 920 85 | 850 IF C-2<>P THEN 890 86 | 860 IF T(X,Y-1)=0 THEN 430 87 | 870 T(X,Y-2)=5 \ T(X,Y-1)=0 \ B(C-1)=-3 88 | 880 GO TO 920 89 | 890 IF C-18<>P THEN 940 90 | 900 IF T(X-1,Y)=0 THEN 430 91 | 910 T(X-2,Y)=5 \ T(X-1,Y)=0 \ B(C-9)=-3 92 | 920 B(Z)=-3 \ B(P)=-7 93 | 930 T(X,Y)=0 \ GO TO 970 94 | 940 C=C+1 95 | 950 NEXT Y 96 | 960 NEXT X 97 | 970 RETURN 98 | 980 REM *** CHECK IF GAME IS OVER 99 | 990 F=0 100 | 1000 FOR R=2 TO 8 101 | 1010 FOR C=2 TO 8 102 | 1020 IF T(R,C)<>5 THEN 1200 103 | 1030 F=F+1 104 | 1040 FOR A=R-1 TO R+1 105 | 1050 T=0 106 | 1060 FOR B=C-1 TO C+1 107 | 1070 T=T+T(A,B) 108 | 1080 NEXT B 109 | 1090 IF T<>10 THEN 1110 110 | 1100 IF T(A,C)<>0 THEN 1320 111 | 1110 NEXT A 112 | 1120 FOR X=C-1 TO C+1 113 | 1130 T=0 114 | 1140 FOR Y=R-1 TO R+1 115 | 1150 T=T+T(Y,X) 116 | 1160 NEXT Y 117 | 1170 IF T<>10 THEN 1190 118 | 1180 IF T(R,X)<>0 THEN 1320 119 | 1190 NEXT X 120 | 1200 NEXT C 121 | 1210 NEXT R 122 | 1220 REM *** GAME IS OVER 123 | 1230 PRINT "THE GAME IS OVER." 124 | 1240 PRINT "YOU HAD";F;"PIECES REMAINING" 125 | 1250 IF F<>1 THEN 1280 126 | 1260 PRINT "BRAVO! YOU MADE A PERFECT SCORE!!" 127 | 1270 PRINT "SAVE THIS PAPER AS A RECORD OF YOUR WORK." 128 | 1280 PRINT \ PRINT "PLAY AGAIN (YES OR NO)"; \ INPUT A$ 129 | 1290 IF A$="NO" THEN 1330 130 | 1300 RESTORE \ GO TO 230 131 | 1310 STOP 132 | 1320 RETURN 133 | 1330 PRINT \ PRINT "SO LONG FOR NOW." \ PRINT 134 | 1340 END 135 |  -------------------------------------------------------------------------------- /programs/hun.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT "THE UNREAL MIDEVIL WAR GAME." 2 | 20 PRINT "YOU ARE THE KING OF A CASTLE WHICH IS UNDER ATTACK BY" 3 | 30 PRINT "THE INFAMOUS PDP-11 THE HUN." 4 | 40 PRINT "AS THE KING YOU MUST DIRECT YOUR 1000 MEN TO DEFEND THE" 5 | 50 PRINT "FOUR SIDES OF THE CASTLE. ALSO YOU MUST HAVE SOME MEN" 6 | 60 PRINT "ON FIRE WATCH, TO PUT OUT FLAMING ARROWS. LET THE BATTLE" 7 | 70 PRINT "BEGIN, I WILL SHOW NO MERCY." 8 | 80 RANDOMIZE 9 | 90 LET A1=1000 10 | 100 LET A=1000 11 | 110 PRINT 12 | 120 PRINT 13 | 130 LET B=1 14 | 140 PRINT "BATTLE NUMBER "B\LET B=B+1 15 | 150 PRINT "HOW MANY MEN WILL DEFEND THE NORTH WALL?" 16 | 160 INPUT N 17 | 170 IF N>A THEN 1460 18 | 180 IF A<10 THEN 200 19 | 190 IF A/15>N THEN 1430 20 | 200 PRINT "SOUTH WALL ("A-N"LEFT)" 21 | 210 INPUT S 22 | 220 IF (S+N)>A THEN 1460 23 | 230 IF A<10 THEN 250 24 | 240 IF A/15>S THEN 1430 25 | 250 PRINT "EAST WALL ("A-(N+S)"LEFT)" 26 | 260 INPUT E 27 | 270 IF (E+S+N)>A THEN 1460 28 | 280 IF A<10 THEN 300 29 | 290 IF A/15>E THEN 1430 30 | 300 PRINT "WEST WALL ("A-(N+S+E)"LEFT)" 31 | 310 INPUT W 32 | 320 IF (S+N+E+W)>A THEN 1460 33 | 330 IF A<10 THEN 350 34 | 340 IF A/15>W THEN 1430 35 | 350 PRINT "HOW MANY MEN ON FIRE WATCH ("A-(N+S+E+W)"LEFT)" 36 | 360 INPUT F 37 | 370 IF (E+S+W+N+F)>A THEN 1460 38 | 380 IF A-(E+W+N+S+F)=0 THEN 430 39 | 390 PRINT 40 | 400 PRINT 41 | 410 PRINT "KING, YOU JUST THREW"A-(E+S+W+N+F)"MEN OVER THE WALL." 42 | 420 LET A=A-(A-(E+W+N+S+F)) 43 | 430 PRINT 44 | 440 PRINT "RAISE THE DRAWBRIDGE, THE HUN IS APPROACHING." 45 | 450 PRINT "WATCH OUT FOR FLAMING ARROWS, SWISH..." 46 | 460 PRINT 47 | 470 PRINT 48 | 480 LET F1=A1/15\LET F1=INT(F1*RND(0)) 49 | 490 IF F1>F*1.5 THEN 510 50 | 500 GO TO 520 51 | 510 PRINT "KING, YOUR CASTLE IS BURNING!!!"\GO TO 1410 52 | 520 LET M1=A1-F1 53 | 530 LET N1=M1/2\LET N1=INT(N1*RND(0)) 54 | 540 IF A1<10 THEN 560 55 | 550 IF A1/15>N1 THEN 530 56 | 560 LET S1=M1/2\LET S1=INT(S1*RND(0)) 57 | 570 IF A1<10 THEN 590 58 | 580 IF A1/15>S1 THEN 560 59 | 590 LET E1=M1/2\LET E1=INT(E1*RND(0)) 60 | 600 IF A1<10 THEN 620 61 | 610 IF A1/15>E1 THEN 590 62 | 620 LET W1=A1-(N1+S1+E1+F1) 63 | 630 IF A1<10 THEN 650 64 | 640 IF A1/15>W1 THEN 530 65 | 650 IF N1>2*N THEN 670 66 | 660 GO TO 690 67 | 670 PRINT "KING, YOU LOST ALL"N"MEN ON THE NORTH WALL." 68 | 680 LET A=A-N\GO TO 810 69 | 690 IF N>2*N1 THEN 710 70 | 700 GO TO 740 71 | 710 PRINT "KING, YOU KILLED ALL"N1"MEN ON THE NORTH WALL." 72 | 720 LET A1=A1-N1 73 | 730 GO TO 810 74 | 740 IF N1>N THEN 770 75 | 750 IF N>N1 THEN 790 76 | 760 PRINT "DRAW AT THE NORTH WALL."\GO TO 810 77 | 770 PRINT "KING, YOU LOST"N1-N"MEN AT THE NORTH WALL." 78 | 780 LET A=A-(N1-N)\GO TO 810 79 | 790 PRINT "KING, YOU KILLED"N-N1"MEN AT THE NORTH WALL." 80 | 800 LET A1=A1-(N-N1) 81 | 810 IF S1>2*S THEN 830 82 | 820 GO TO 850 83 | 830 PRINT "KING, YOU LOST ALL"S"MEN ON THE SOUTH WALL." 84 | 840 LET A=A-S\GO TO 970 85 | 850 IF S>2*S1 THEN 870 86 | 860 GO TO 900 87 | 870 PRINT "KING, YOU KILLED ALL"S1"MEN ON THE SOUTH WALL." 88 | 880 LET A1=A1-S1 89 | 890 GO TO 970 90 | 900 IF S1>S THEN 930 91 | 910 IF S>S1 THEN 950 92 | 920 PRINT "DRAW AT THE SOUTH WALL."\GO TO 970 93 | 930 PRINT "KING, YOU LOST"S1-S"MEN AT THE SOUTH WALL." 94 | 940 LET A=A-(S1-S)\GO TO 970 95 | 950 PRINT "KING, YOU KILLED"S-S1"MEN AT THE SOUTH WALL." 96 | 960 LET A1=A1-(S-S1) 97 | 970 IF E1>2*E THEN 990 98 | 980 GO TO 1010 99 | 990 PRINT "KING, YOU LOST ALL"E"MEN ON THE EAST WALL." 100 | 1000 LET A=A-E\GO TO 1130 101 | 1010 IF E>2*E1 THEN 1030 102 | 1020 GO TO 1060 103 | 1030 PRINT "KING, YOU KILLED ALL"E1"MEN ON THE EAST WALL." 104 | 1040 LET A1=A1-E1 105 | 1050 GO TO 1130 106 | 1060 IF E1>E THEN 1090 107 | 1070 IF E>E1 THEN 1110 108 | 1080 PRINT "DRAW AT THE EAST WALL."\GO TO 1130 109 | 1090 PRINT "KING, YOU LOST"E1-E"MEN AT THE EAST WALL." 110 | 1100 LET A=A-(E1-E)\GO TO 1130 111 | 1110 PRINT "KING, YOU KILLED"E-E1"MEN AT THE EAST WALL." 112 | 1120 LET A1=A1-(E-E1) 113 | 1130 IF W1>2*W THEN 1150 114 | 1140 GO TO 1170 115 | 1150 PRINT "KING, YOU LOST ALL"W"MEN ON THE WEST WALL." 116 | 1160 LET A=A-W\GO TO 1290 117 | 1170 IF W>2*W1 THEN 1190 118 | 1180 GO TO 1220 119 | 1190 PRINT "KING, YOU KILLED ALL"W1"MEN ON THE WEST WALL." 120 | 1200 LET A1=A1-W1 121 | 1210 GO TO 1290 122 | 1220 IF W1>W THEN 1250 123 | 1230 IF W>W1 THEN 1270 124 | 1240 PRINT "DRAW AT THE WEST WALL."\GO TO 1290 125 | 1250 PRINT "KING, YOU LOST"W1-W"MEN AT THE WEST WALL." 126 | 1260 LET A=A-(W1-W)\GO TO 1290 127 | 1270 PRINT "KING, YOU KILLED"W-W1"MEN AT THE WEST WALL." 128 | 1280 LET A1=A1-(W-W1)\GO TO 1290 129 | 1290 PRINT 130 | 1300 PRINT 131 | 1310 PRINT "KING, YOU HAVE"A"MEN LEFT." 132 | 1320 PRINT "THE HUN HAS"A1"MEN LEFT." 133 | 1330 PRINT 134 | 1340 PRINT 135 | 1350 PRINT 136 | 1360 PRINT 137 | 1370 IF A<=0 THEN 1410 138 | 1380 IF A1<=0 THEN 1420 139 | 1390 GO TO 140 140 | 1400 PRINT 141 | 1410 PRINT "KING, YOU LOST THE WAR!!!!!!"\GO TO 1490 142 | 1420 PRINT "KING, YOU WON THE WAR!!!"\GO TO 1490 143 | 1430 PRINT 144 | 1440 PRINT 145 | 1450 PRINT "KING, YOUR DEFENSES ARE TOO UNEVEN."\GO TO 150 146 | 1460 PRINT 147 | 1470 PRINT 148 | 1480 PRINT "KING, YOU ONLY HAVE"A"MEN."\GO TO 150 149 | 1490 END 150 | -------------------------------------------------------------------------------- /programs/hurkle.bas: -------------------------------------------------------------------------------- 1 | 90 REM *** CONVERTED TO RSTS/E BY DAVID AHL, DIGITAL 2 | 100 REM HURKLE - PEOPLE'S COMPUTER COMPANY, MENLO PARK CA 3 | 105 RANDOMIZE 4 | 110 N=5 5 | 120 G=10 6 | 210 PRINT 7 | 220 PRINT "A HURKLE IS HIDING ON A";G;"BY";G;"GRID. HOMEBASE" 8 | 230 PRINT "ON THE GRID IS POINT 0,0 AND ANY GRIDPOINT IS A" 9 | 240 PRINT "PAIR OF WHOLE NUMBERS SEPARATED BY A COMMA. TRY TO" 10 | 250 PRINT "GUESS THE HURKLE'S GRIDPOINT. YOU GET";N;"TRIES." 11 | 260 PRINT "AFTER EACH TRY, I WILL TELL YOU THE APPROXIMATE" 12 | 270 PRINT "DIRECTION TO GO TO LOOK FOR THE HURKLE." 13 | 280 PRINT 14 | 285 A=INT(G*RND(0)) 15 | 286 B=INT(G*RND(0)) 16 | 310 FOR K=1 TO N 17 | 320 PRINT "GUESS #";K; 18 | 330 INPUT X,Y 19 | 340 IF ABS(X-A)+ABS(Y-B)=0 THEN 500 20 | 350 REM PRINT INFO 21 | 360 GOSUB 610 22 | 370 PRINT 23 | 380 NEXT K 24 | 410 PRINT 25 | 420 PRINT "SORRY, THAT'S";N;"GUESSES." 26 | 430 PRINT "THE HURKLE IS AT ";A;",";B 27 | 440 PRINT 28 | 450 PRINT "LET'S PLAY AGAIN. HURKLE IS HIDING." 29 | 460 PRINT 30 | 470 GO TO 285 31 | 500 REM 32 | 510 PRINT 33 | 520 PRINT "YOU FOUND HIM IN";K;"GUESSES!" 34 | 530 FOR I=1 TO 10\PRINT CHR$(7);\NEXT I\PRINT 35 | 540 GO TO 440 36 | 610 PRINT "GO "; 37 | 620 IF Y=B THEN 670 38 | 630 IF Y80 GO TO 230 20 | 200 IF A(I)=0 GO TO 230 21 | 210 IF A(I)<0 GO TO 230 22 | 220 GO TO 240 23 | 230 PRINT "TYPE A NUMBER FROM 1 TO 80, INCLUSIVE, PLEASE." \ GO TO 180 24 | 240 NEXT I 25 | 250 C=0 \ FOR K=1 TO 7 26 | 260 FOR J=K TO 7 27 | 270 X=A(K) \ Y=A(J+1) \ IF X=Y GO TO 290 28 | 280 GO TO 390 29 | 290 C=C+1 30 | 300 PRINT "A DUPLICATE NUMBER HAS BEEN DETECTED IN YOUR INPUT." 31 | 310 PRINT "TYPE ANOTHER NUMBER, PLEASE." \ INPUT Y 32 | 320 IF Y=0 GO TO 370 33 | 330 IF Y>80 GO TO 370 34 | 340 IF Y<0 GO TO 370 35 | 350 A(J+1)=Y 36 | 360 GO TO 280 37 | 370 PRINT "TYPE A NUMBER FROM 1 TO 80, INCLUSIVE, PLEASE." 38 | 380 GO TO 310 39 | 390 NEXT J 40 | 400 NEXT K \ PRINT \ PRINT 41 | 410 IF C=0 GO TO 430 42 | 420 GO TO 250 43 | 430 PRINT "THE COMPUTER WILL SELECT 20 NUMBERS AT RANDOM. THE BELL TONE" 44 | 440 PRINT "INDICATES IT IS IN THE PROCESS OF SELECTING THE NUMBERS." 45 | 450 RANDOMIZE 46 | 460 FOR L=1 TO 20 47 | 470 N(L)=INT(80*RND(0)+1) 48 | 480 M(L)=N(L) 49 | 490 NEXT L 50 | 500 L=20 51 | 510 FOR K=1 TO 20 52 | 520 FOR J=K TO L-1 53 | 530 X=M(K) 54 | 540 Y=M(J+1) 55 | 550 IF X<>Y GO TO 600 56 | 560 RANDOMIZE 57 | 570 M(J+1)=INT(80*RND(0)+1) 58 | 580 Y=M(J+1) 59 | 590 GO TO 550 60 | 600 PRINT CHR$(7); 61 | 610 NEXT J 62 | 620 NEXT K 63 | 630 PRINT \ PRINT 64 | 640 PRINT "YOUR NUMBERS ARE:" 65 | 650 FOR I=1 TO 8 66 | 660 PRINT A(I); 67 | 670 NEXT I \ PRINT \ PRINT \ PRINT 68 | 680 PRINT "THE COMPUTER HAS SELECTED THE FOLLOWING NUMBERS:" 69 | 690 FOR L=1 TO 20 70 | 700 PRINT M(L); 71 | 710 NEXT L \ PRINT \ PRINT 72 | 720 PRINT "THE PROGRAM WILL COMPARE YOUR NUMBERS WITH THE " 73 | 730 PRINT "NUMBERS THE COMPUTER HAS SELECTED." 74 | 740 PRINT \ PRINT 75 | 750 PRINT "LISTEN FOR THE BELL TONE---EACH RING INDICATES ANOTHER" 76 | 760 PRINT "CORRECT GUESS BY YOU." 77 | 770 PRINT "YOU HAVE GUESSED THE FOLLOWING NUMBERS:" 78 | 780 G=0 79 | 790 FOR I=1 TO 8 80 | 800 FOR J=1 TO 20 81 | 810 X=A(I) 82 | 820 Y=M(J) 83 | 830 IF X=Y GO TO 860 84 | 840 NEXT J 85 | 850 GO TO 890 86 | 860 PRINT CHR$(7); 87 | 870 PRINT A(I); 88 | 880 G=G+1 89 | 890 NEXT I \ PRINT 90 | 900 IF G<5 GO TO 950 91 | 910 IF G=5 GO TO 1050 92 | 920 IF G=6 GO TO 1070 93 | 930 IF G=7 GO TO 1090 94 | 940 IF G=8 GO TO 1110 95 | 950 PRINT "YOU CAUGHT";G;"NUMBER(S) OUT OF 8--" 96 | 960 PRINT "NOT ENOUGH CORRECT GUESSES--'SO SOLLY', NO PAYOFF." 97 | 970 PRINT \ PRINT 98 | 980 C=0 99 | 990 PRINT "WANT TO PLAY KENO AGAIN (YES OR NO)"; \ INPUT X$ 100 | 1000 IF X$="YES" GO TO 130 101 | 1010 IF X$="NO" GO TO 1140 102 | 1020 C=C+1 103 | 1030 IF C=3 GO TO 1140 104 | 1040 PRINT "PLEASE TYPE 'YES' OR 'NO'" \ GO TO 990 105 | 1050 PRINT "YOU CAUGHT";G;"NUMBERS OUT OF 8--YOU WIN $10.00" 106 | 1060 GO TO 970 107 | 1070 PRINT "YOU CAUGHT";G;"NUMBERS OUT OF 8--YOU WIN $100.00" 108 | 1080 GO TO 970 109 | 1090 PRINT "YOU CAUGHT";G;"NUMBERS OUT OF 8--YOU WIN $2,200.00" 110 | 1100 GO TO 970 111 | 1110 PRINT "YOU CAUGHT";G;"NUMBERS OUT OF 8--YOU WIN $25,000.00" 112 | 1120 PRINT "8 OUT OF 8 DOES NOT OCCUR TOO OFTEN, LUCKY." 113 | 1130 GO TO 970 114 | 1140 PRINT "THAT'S ALL FOR NOW. PLAY KENO AGAIN ! BE SEEING YOU !" 115 | 1150 END 116 | -------------------------------------------------------------------------------- /programs/life.bas: -------------------------------------------------------------------------------- 1 | 1 REM GAME OF LIFE 2 | 2 REM MODIFIED FOR VT52/VT100 BY BOB SUPNIK 3 | 3 REM MODIFIED TO PROMPT FOR MAX GENERATIONS AND TOTAL MAX POPULATION BY DON RUBIN 4 | 5 E$=CHR$(27%) \ X2%=23% \ Y2%=80% \ P%=0% \ G=1 \ I9%=0% 5 | 10 FOR X%=1% TO X2% \ FOR Y%=1% TO Y2% \ A%(X%,Y%)=0% \ NEXT Y% \ NEXT X% 6 | 20 DIM A%(23%,80%),B$(23%) 7 | 23 PRINT CHR$(27%);"[?2l"; 8 | 25 PRINT E$;"H";E$;"J";"Enter maximum number of generations: "; \ INPUT Z 9 | 30 C%=1% 10 | 35 PRINT "Enter your pattern:" 11 | 40 LINPUT B$(C%) \ L%=LEN(B$(C%)) \ IF L%>77% THEN L%=77% 12 | 50 IF L%=0% THEN GO TO 80 13 | 55 B$(C%)=SEG$(B$(C%),1,L%) 14 | 60 C%=C%+1 15 | 70 IF C%L% THEN L%=LEN(B$(X%)) 20 | 110 NEXT X% 21 | 120 X1%=11%-C%/2% 22 | 130 Y1%=38%-L%/2% 23 | 140 FOR X%=1% TO C% 24 | 150 FOR Y%=1% TO LEN(B$(X%)) 25 | 160 IF SEG$(B$(X%),Y%,Y%)<>" " THEN A%(X%+X1%,Y%+Y1%)=1% \ P%=P%+1% 26 | 170 NEXT Y% 27 | 180 NEXT X% 28 | 190 X2%=X1%+C% \ PRINT E$;"H";E$;"J"; 29 | 200 IF P%<>0% THEN GO TO 210 30 | 205 PRINT \ PRINT E$;"H";E$;"J";"Generation:";G;" Population is extinct"; 31 | 209 D$="T" \ GO TO 650 32 | 210 IF G>Z THEN 650 33 | 211 PRINT \ PRINT E$;"H";"Generation:";G;" Population:";P%;E$;"K"; 34 | 213 IF P%>Q% THEN Q%=P% 35 | 215 IF I9%<>0% THEN PRINT " Bounded"; 36 | 218 X3%=23% \ Y3%=80% \ X4%=1% \ Y4%=1% 37 | 220 G=G+1 38 | 230 FOR X%=X1% TO X2% 39 | 240 PRINT \ PRINT E$;"Y";CHR$(32%+X%);CHR$(31%+Y1%); 40 | 250 FOR Y%=Y1% TO Y2% 41 | 253 IF A%(X%,Y%)=2% THEN A%(X%,Y%)=0% 42 | 256 IF A%(X%,Y%)=3% THEN A%(X%,Y%)=1% 43 | 260 IF A%(X%,Y%)<>1% THEN PRINT " "; \ GO TO 270 44 | 261 PRINT "*"; 45 | 262 IF X%X4% THEN X4%=X% 47 | 266 IF Y%Y4% THEN Y4%=Y% 49 | 270 NEXT Y% 50 | 290 NEXT X% 51 | 295 PRINT E$;"J";E$;"H" 52 | 299 X1%=X3% \ X2%=X4% \ Y1%=Y3% \ Y2%=Y4% \ I9%=0% 53 | 301 IF X1%<3% THEN X1%=3% \ I9%=-1% 54 | 303 IF X2%>21% THEN X2%=21% \ I9%=-1% 55 | 305 IF Y1%<3% THEN Y1%=3% \ I9%=-1% 56 | 307 IF Y2%>78% THEN Y2%=78% \ I9%=-1% 57 | 309 P%=0% 58 | 500 FOR X%=X1%-1% TO X2%+1% 59 | 510 FOR Y%=Y1%-1% TO Y2%+1% 60 | 520 C%=0% 61 | 530 FOR I%=X%-1% TO X%+1% 62 | 540 FOR J%=Y%-1% TO Y%+1% 63 | 550 IF A%(I%,J%)=1% THEN C%=C%+1% 64 | 555 IF A%(I%,J%)=2% THEN C%=C%+1% 65 | 560 NEXT J% 66 | 570 NEXT I% 67 | 580 IF A%(X%,Y%)=0% THEN GO TO 610 68 | 582 P%=P%+1% 69 | 584 IF C%=3% THEN GO TO 620 70 | 586 IF C%=4% THEN GO TO 620 71 | 588 P%=P%-1% 72 | 590 A%(X%,Y%)=2% 73 | 600 GO TO 620 74 | 610 IF C%=3% THEN A%(X%,Y%)=3% \ P%=P%+1% 75 | 620 NEXT Y% 76 | 630 NEXT X% 77 | 635 X1%=X1%-1% \ Y1%=Y1%-1% \ X2%=X2%+1% \ Y2%=Y2%+1% 78 | 640 GO TO 200 79 | 650 IF D$="T" GOTO 683 80 | 670 PRINT \ PRINT "Do you want to continue"; 81 | 680 LINPUT A$ \ IF A$="Y" GOTO 690 82 | 683 PRINT \ PRINT "Maximum population was ";Q%,CHR$(27%);"<" 83 | 685 STOP 84 | 690 PRINT E$;"H";E$;"J";"Enter maximum number of generations: "; \ INPUT Z 85 | 700 GOTO 200 86 | 711 END 87 | -------------------------------------------------------------------------------- /programs/lit.bas: -------------------------------------------------------------------------------- 1 | 1 REM *** CONVERTED FROM FOCAL TO BASIC BY PAM MCGINLEY 2 | 2 REM *** CONVERTED TO RSTS/E BY DAVE AHL, DIGITAL 3 | 5 R=0 4 | 10 PRINT "TEST YOUR KNOWLEDGE OF CHILDREN'S LITERATURE." 5 | 12 PRINT \PRINT "THIS IS A MULTIPLE-CHOICE QUIZ." 6 | 13 PRINT "TYPE A 1, 2, 3, OR 4 AFTER THE QUESTION MARK." 7 | 15 PRINT \PRINT "GOOD LUCK!!"\PRINT \PRINT 8 | 40 PRINT "IN 'PINOCCHIO', WHAT WAS THE NAME OF THE CAT?" 9 | 42 PRINT "1)TIGGER, 2)CICERO, 3)FIGARO, 4)GUIPETTO"; 10 | 43 INPUT A\IF A=3 THEN 46 11 | 44 PRINT "SORRY...FIGARO WAS HIS NAME."\GOTO 50 12 | 46 PRINT "VERY GOOD! HERE'S ANOTHER." 13 | 47 R=R+1 14 | 50 PRINT \PRINT 15 | 51 PRINT "FROM WHOSE GARDEN DID BUGS BUNNY STEAL THE CARROTS?" 16 | 52 PRINT "1)MR. NIXON'S, 2)ELMER FUDD'S, 3)CLEM JUDD'S, 4)STROMBOLI'S"; 17 | 53 INPUT A\IF A=2 THEN 56 18 | 54 PRINT "TOO BAD...IT WAS ELMER FUDD'S GARDEN."\GOTO 60 19 | 56 PRINT "PRETTY GOOD!" 20 | 57 R=R+1 21 | 60 PRINT \PRINT 22 | 61 PRINT "IN THE WIZARD OF OZ, DOROTHY'S DOG WAS NAMED" 23 | 62 PRINT "1)CICERO, 2)TRIXIE, 3)KING, 4)TOTO"; 24 | 63 INPUT A\IF A=4 THEN 66 25 | 64 PRINT "BACK TO THE BOOKS...TOTO WAS HIS NAME."\GOTO 70 26 | 66 PRINT "YEA! YOU'RE A REAL LITERATURE GIANT!" 27 | 67 R=R+1 28 | 70 PRINT \PRINT 29 | 71 PRINT "WHO WAS THE FAIR MAIDEN WHO ATE THE POISON APPLE?" 30 | 72 PRINT "1)SLEEPING BEAUTY, 2)CINDERELLA, 3)SNOW WHITE, 4)WENDY"; 31 | 73 INPUT A\IF A=3 THEN 76 32 | 74 PRINT "OH, COME ON NOW...IT WAS SNOW WHITE."\GOTO 80 33 | 76 PRINT "GOOD MEMORY!" 34 | 77 R=R+1 35 | 80 PRINT \PRINT 36 | 85 IF R=4 THEN 100 37 | 90 IF R<2 THEN 200 38 | 92 PRINT "NOT BAD, BUT YOU MIGHT SPEND A LITTLE MORE TIME" 39 | 94 PRINT "READING THE NURSERY GREATS." 40 | 96 goto 999 41 | 100 PRINT "WOW! THAT'S SUPER! YOU REALLY KNOW YOUR NURSERY" 42 | 105 PRINT "STORIES. "\PRINT 43 | 110 PRINT "YOUR NEXT QUIZ WILL BE ON 2ND CENTURY CHINESE" 44 | 120 PRINT "LITERATURE (HA, HA, HA)" 45 | 130 goto 999 46 | 200 PRINT "UGH. THAT WAS DEFINITELY NOT TOO SWIFT. BACK TO" 47 | 205 PRINT "NURSERY SCHOOL FOR YOU, MY FRIEND." 48 | 999 END 49 | -------------------------------------------------------------------------------- /programs/loan.bas: -------------------------------------------------------------------------------- 1 | 10 DEF FNA(N9)=(1-(R2+1)^(-N9))/R2 2 | 20 DEF FNR(Z9)=.01*INT(Z9*100+.5) 3 | 30 PRINT 4 | 40 PRINT " ","LOAN AMORTIZATION PROGRAM" 5 | 50 PRINT 6 | 60 PRINT "DO YOU WISH A DESCRIPTION? TYPE YES OR NO:"; 7 | 70 INPUT R1$ 8 | 80 IF R1$="NO" THEN 170 9 | 90 PRINT 10 | 100 PRINT "THIS PROGRAM COMPUTES MORTGAGE LOAN VALUES AND" 11 | 110 PRINT "WILL PRINT AN AMORTIZATION SCHEDULE GIVEN ANY" 12 | 120 PRINT "THREE OF THE FOUR LOAN VALUES:" 13 | 130 PRINT "1) INTEREST RATE" 14 | 140 PRINT "2) MONTHLY PAYMENT" 15 | 150 PRINT "3) LIFE OF THE LOAN" 16 | 160 PRINT "4) AMOUNT OF THE LOAN" 17 | 170 PRINT 18 | 180 PRINT "ENTER VALUES FOR 3 OF THE 4 FOLLOWING INPUTS" 19 | 190 PRINT "AND A ZERO FOR THE ONE YOU WISH COMPUTED...." 20 | 200 PRINT 21 | 210 PRINT "AMOUNT OF THE LOAN" 22 | 220 INPUT A2 23 | 230 A2=ABS(A2) 24 | 240 PRINT "MONTHLY PAYMENT" 25 | 250 INPUT P2 26 | 260 P2=ABS(P2) 27 | 270 PRINT "INTEREST RATE (E.G. 5 1/4% WOULD BE 5.25)" 28 | 280 INPUT R2 29 | 290 A3=ABS(R2) 30 | 300 R2=A3/1200 31 | 310 PRINT "LIFE OF THE LOAN (E.G. 8 YEARS 2 MONTHS WOULD BE 8.02)" 32 | 320 INPUT L1 33 | 330 L1=ABS(L1) 34 | 340 Y2=INT(L1) 35 | 350 M2=INT(100*(L1-Y2)+.9) 36 | 360 IF M2<12 THEN 390 37 | 370 PRINT "INVALID INPUT - TRY AGAIN!" 38 | 380 GO TO 310 39 | 390 N2=12*Y2+M2 40 | 400 K3=0 41 | 410 IF R2<>0 THEN 430 42 | 420 K3=K3+1 43 | 430 IF P2<>0 THEN 450 44 | 440 K3=K3+1 45 | 450 IF N2<>0 THEN 470 46 | 460 K3=K3+1 47 | 470 IF A2<>0 THEN 490 48 | 480 K3=K3+1 49 | 490 IF K3=1 THEN 530 50 | 500 PRINT 51 | 510 PRINT "SORRY, I DON'T KNOW WHICH ONE TO COMPUTE." 52 | 520 GO TO 170 53 | 530 PRINT 54 | 540 PRINT 55 | 550 IF R2=0 THEN 780 56 | 560 IF A2=0 THEN 1010 57 | 570 IF P2=0 THEN 1060 58 | 580 REM FIND LIFE 59 | 590 IF P2*FNA(1)<=A2 THEN 620 60 | 600 PRINT " ","LIFE OF THE LOAN IS LESS THAN 1 MONTH!" 61 | 610 GO TO 170 62 | 620 FOR N1=1 TO 9999 STEP 12 63 | 630 A1=P2*FNA(N1) 64 | 640 IF A1>A2 THEN 670 65 | 650 IF A1=A2 THEN 720 66 | 660 NEXT N1 67 | 670 J=N1-11 68 | 680 FOR N2=J TO N1 69 | 690 A1=P2*FNA(N2) 70 | 700 IF A1>=A2 THEN 730 71 | 710 NEXT N2 72 | 720 N2=N1 73 | 730 Y2=INT(N2/12) 74 | 740 M2=INT(N2-12*Y2) 75 | 750 PRINT " ","LOAN PERIOD IS ";Y2;"YEARS";M2;"MONTHS" 76 | 760 GO TO 1090 77 | 770 REM FIND INTEREST RATE 78 | 780 IF P2*N2>=A2 THEN 810 79 | 790 PRINT " ","LOAN CAN NOT BE REPAID AT $";P2;"A MONTH" 80 | 800 GO TO 170 81 | 810 X=0 82 | 820 IF P2*N2<=A2 THEN 960 83 | 830 FOR I=1 TO 9999 84 | 840 R2=I/1200 85 | 850 A1=P2*FNA(N2) 86 | 860 IF A1A2 THEN 900 88 | 880 X=I 89 | 890 GO TO 960 90 | 900 NEXT I 91 | 910 X=I-.99 92 | 920 X=X+1.0000000000000E-03 93 | 930 R2=X/1200 94 | 940 A1=P2*FNA(N2) 95 | 950 IF A1-1.0000000000000E-05*A2>A2 THEN 920 96 | 960 R2=X/1200 97 | 970 A3=1.0000000000000E-03*INT(1000*(X+5.0000000000000E-04)) 98 | 980 PRINT " ","ANNUAL INTEREST RATE IS ";A3;"%" 99 | 990 GO TO 1090 100 | 1000 REM FIND AMOUNT OF LOAN 101 | 1010 A2=P2*FNA(N2) 102 | 1020 A8=FNR(A2) 103 | 1030 PRINT " ","AMOUNT OF LOAN IS $";A8 104 | 1040 GO TO 1090 105 | 1050 REM FIND MONTHLY PAYMENT 106 | 1060 P2=A2/FNA(N2) 107 | 1070 P8=FNR(P2) 108 | 1080 PRINT " ","MONTHLY PAYMENT IS $";P8 109 | 1090 I2=0 110 | 1100 A1=A2 111 | 1110 FOR K=1 TO N2 112 | 1120 I3=FNR(A1*R2) 113 | 1130 I2=I2+I3 114 | 1140 A1=A1-P2+I3 115 | 1150 NEXT K 116 | 1160 PRINT " ","TOTAL INTEREST ON LOAN IS $";FNR(I2) 117 | 1170 PRINT 118 | 1180 PRINT 119 | 1190 PRINT "DO YOU WISH AN AMORTIZATION SCHEDULE? TYPE YES OR NO:"; 120 | 1200 INPUT R1$ 121 | 1210 IF R1$="YES" THEN 1280 122 | 1220 PRINT 123 | 1230 PRINT "ANOTHER ANALYSIS? TYPE YES OR NO:"; 124 | 1240 INPUT R1$ 125 | 1250 PRINT 126 | 1260 IF R1$="YES" THEN 200 127 | 1270 GO TO 1810 128 | 1280 PRINT 129 | 1290 PRINT "TYPE 1 FOR ANNUAL TABLE, 2 FOR MONTHLY" 130 | 1300 INPUT K2 131 | 1310 PRINT 132 | 1320 PRINT 133 | 1330 PRINT " ","* * * MORTGAGE TABLE * * *" 134 | 1340 PRINT 135 | 1350 A8=FNR(A2) 136 | 1360 PRINT "AMOUNT OF LOAN $";A8,"ANNUAL INTEREST RATE";A3;"%" 137 | 1370 P8=FNR(P2) 138 | 1380 PRINT "MONTHLY PAYMENT $";P8,"REPAID IN";Y2;"YEARS";M2;"MONTHS" 139 | 1390 PRINT "TOTAL INTEREST $";FNR(I2) 140 | 1400 PRINT 141 | 1410 PRINT 142 | 1420 PRINT " ","AMORTIZATION SCHEDULE" 143 | 1430 PRINT 144 | 1440 PRINT 145 | 1450 PRINT " ENDING","PRINCIPAL","INTEREST" 146 | 1460 PRINT "PRINCIPAL"," PAID"," PAID" 147 | 1470 M=0 148 | 1480 K=0 149 | 1490 A1=A2 150 | 1500 T1=0 151 | 1510 T2=0 152 | 1520 FOR J=1 TO N2+1 153 | 1530 K=K+1 154 | 1540 X7=FNR(A1*R2) 155 | 1550 P7=P2-X7 156 | 1560 IF P7<=A1 THEN 1580 157 | 1570 P7=A1 158 | 1580 T1=T1+X7 159 | 1590 T2=T2+P7 160 | 1600 A1=A1-P7 161 | 1610 IF K2=1 THEN 1670 162 | 1620 IF P7+X7=0 THEN 1690 163 | 1630 D1=FNR(A1) 164 | 1640 D2=FNR(P7) 165 | 1650 D3=FNR(X7) 166 | 1660 PRINT D1,D2,D3 167 | 1670 IF P7+X7=0 THEN 1690 168 | 1680 IF K<12 THEN 1780 169 | 1690 M=M+1 170 | 1700 IF A1+T1+T2=0 THEN 1750 171 | 1710 D1=FNR(A1) 172 | 1720 D2=FNR(T2) 173 | 1730 D3=FNR(T1) 174 | 1740 PRINT D1,D2,D3,"YEAR";M;"TOTALS" 175 | 1750 T1=0 176 | 1760 T2=0 177 | 1770 K=0 178 | 1780 NEXT J 179 | 1790 PRINT 180 | 1800 GO TO 1220 181 | 1810 END 182 | -------------------------------------------------------------------------------- /programs/lpfilter.rlc: -------------------------------------------------------------------------------- 1 | N=5 2 | R 1 0 1 3 | I 2 0 1 0 .035023 4 | L 2 0 25 5 | C 2 0 1200 6 | C 2 3 150 7 | L 3 4 1.2 8 | R 4 5 .001 9 | C 5 0 430 10 | R 5 0 75 11 | K 13.5E6 1E5 16 1 0 5 0 12 | -------------------------------------------------------------------------------- /programs/lunar.bas: -------------------------------------------------------------------------------- 1 | 110 FOR I=1 TO 10\PRINT CHR$(7);\NEXT I 2 | 120 PRINT "EARTH CONTROL CALLING LUNAR LANDER. OUR IBM COMPUTER" 3 | 130 PRINT "HAS LOST YOUR DESCENT PROGRAM. YOU ARE NOW UNDER MANUAL" 4 | 140 PRINT "CONTROL. USE ANY TIME INTERVAL YOU FEEL IS NECESSARY FOR" 5 | 150 PRINT "RETRO-ROCKET BURSTS. USE 0 OR ANY VALUE BETWEEN" 6 | 160 PRINT "8 AND 200 LBS./SEC. AS YOUR RETRO-ROCKET BURN RATE FOR" 7 | 170 PRINT "EACH BURN INTERVAL." 8 | 180 PRINT 9 | 190 PRINT "WE'RE WITH YOU, FELLA!" 10 | 200 PRINT 11 | 210 PRINT 12 | 220 PRINT " TIME ALTITUDE SPEED FUEL WT MOMENTUM "; 13 | 230 PRINT "INTERVAL RATE" 14 | 240 PRINT " SEC MILES FEET FPS LBS RELATIVE"; 15 | 250 PRINT " SEC LBS/SEC" 16 | 260 PRINT 17 | 270 I1=0 18 | 280 L=0 19 | 290 A=120 20 | 300 V=1 21 | 310 M=32500 22 | 320 N=16500 23 | 330 G=1.00000E-03 24 | 340 Z=1.8 25 | 350 Q1=5 26 | 360 Q2=L 27 | 370 GOSUB 1050 28 | 380 Q1=13 29 | 390 Q2=SGN(A)*INT(ABS(A)) 30 | 400 GOSUB 1050 31 | 410 Q1=19 32 | 420 Q2=INT(5280*(A-SGN(A)*INT(ABS(A)))) 33 | 430 GOSUB 1050 34 | 440 Q1=26 35 | 450 Q2=INT(5280*V) 36 | 460 GOSUB 1050 37 | 470 Q1=35 38 | 480 Q2=INT(M-N) 39 | 490 GOSUB 1050 40 | 500 Q1=43 41 | 510 Q2=INT(M*V/32.5) 42 | 520 GOSUB 1050 43 | 530 IF I1=0 THEN 580 44 | 540 K=0 45 | 550 T=20 46 | 560 PRINT 47 | 570 GO TO 600 48 | 580 PRINT TAB(51); 49 | 590 INPUT T,K 50 | 600 IF K<0 THEN 640 51 | 610 IF K=0 THEN 700 52 | 620 IF K<8 THEN 640 53 | 630 IF K<=200 THEN 700 54 | 640 PRINT "NOT POSSIBLE"; 55 | 650 FOR X=1 TO 44 56 | 660 PRINT "."; 57 | 670 NEXT X 58 | 680 INPUT K 59 | 690 GO TO 600 60 | 700 IF ABS(M-N)<1.00000E-03 THEN 1110 61 | 710 IF T<1.00000E-03 THEN 350 62 | 720 S=T 63 | 730 IF (N+S*K)-M<=0 THEN 760 64 | 740 IF K=0 THEN 760 65 | 750 S=(M-N)/K 66 | 760 GOSUB 1010 67 | 770 IF I<=0 THEN 880 68 | 780 IF V<=0 THEN 800 69 | 790 IF J<0 THEN 930 70 | 800 GOSUB 820 71 | 810 GO TO 700 72 | 820 L=L+S 73 | 830 T=T-S 74 | 840 M=M-S*K 75 | 850 A=I 76 | 860 V=J 77 | 870 RETURN 78 | 880 IF S<5.00000E-03 THEN 1160 79 | 890 S=2*A/(V+SQR(V*V+2*A*(G-Z*K/M))) 80 | 900 GOSUB 1010 81 | 910 GOSUB 820 82 | 920 GO TO 880 83 | 930 W=(1-M*G/(Z*K))/2 84 | 940 S=M*V/(Z*K*(W+SQR(W*W+V/Z)))+.05 85 | 950 GOSUB 1010 86 | 960 IF I<=0 THEN 880 87 | 970 GOSUB 820 88 | 980 IF J>=0 THEN 700 89 | 990 IF V<=0 THEN 700 90 | 1000 GO TO 930 91 | 1010 Q=S*K/M 92 | 1015 IF Q<1.00000E-07GO TO 1420 93 | 1020 J=V+G*S+Z*(-Q-Q^2/2-Q^3/3-Q^4/4-Q^5/5) 94 | 1030 I=A-G*S*S/2-V*S+Z*S*(Q/2+Q^2/6+Q^3/12+Q^4/20+Q^5/30) 95 | 1040 RETURN 96 | 1050 IF Q2=0 THEN 1080 97 | 1060 PRINT TAB(Q1-INT(LOG(.5+ABS(Q2))/LOG(10))); 98 | 1070 GO TO 1090 99 | 1080 PRINT TAB(Q1); 100 | 1090 PRINT Q2; 101 | 1100 RETURN 102 | 1110 IF I1<>0 THEN 710 103 | 1120 I1=1 104 | 1130 PRINT "OUT OF FUEL AT"L"SECS" 105 | 1140 K=0 106 | 1150 GO TO 710 107 | 1160 PRINT "ON THE MOON AT"L"SECS" 108 | 1170 W=3600*V 109 | 1180 PRINT "IMPACT VELOCITY OF"W"M.P.H. ("V*5280"F.P.S.)" 110 | 1190 IF ABS(M-N)>.01 THEN 1210 111 | 1200 N=M 112 | 1210 PRINT "FUEL LEFT"M-N"LBS." 113 | 1220 IF W>1 THEN 1250 114 | 1230 PRINT "PERFECT LANDING ! - (LUCKY)" 115 | 1240 GO TO 1370 116 | 1250 IF W>10 THEN 1280 117 | 1260 PRINT "GOOD LANDING - (COULD BE BETTER)" 118 | 1270 GO TO 1370 119 | 1280 IF W>25 THEN 1310 120 | 1290 PRINT "CONGRATULATIONS ON A POOR LANDING" 121 | 1300 GO TO 1370 122 | 1310 IF W>60 THEN 1340 123 | 1320 PRINT "CRAFT DAMAGE. GOOD LUCK!" 124 | 1330 GO TO 1370 125 | 1340 PRINT "SORRY, BUT THERE WERE NO SURVIVORS-YOU BLEW IT!" 126 | 1350 PRINT "IN FACT YOU BLASTED A NEW LUNAR CRATER"W*.277777; 127 | 1360 PRINT "FEET DEEP" 128 | 1370 PRINT 129 | 1380 GO TO 210 130 | 1400 STOP 131 | 1420 LET Q=0\GO TO 1020 132 | 9999 END 133 | -------------------------------------------------------------------------------- /programs/magicsq.bas: -------------------------------------------------------------------------------- 1 | 20 PRINT "GAME OF MAGIC SQUARE BY DAVID AHL"\PRINT 2 | 25 PRINT "PLAYERS ALTERNATELY CHOOSE AN INTEGER (1 TO 9)" 3 | 30 PRINT "THAT HAS NOT BEEN PREVIOUSLY USED AND PLACE IT" 4 | 35 PRINT "IN ANY UNFILLED CELL OF A TIC-TAC-TOE BOARD." 5 | 40 PRINT "THE GOAL IS TO MAKE THE SUM OF EACH ROW, COLUMN," 6 | 45 PRINT "AND DIAGONAL EQUAL TO 15."\PRINT 7 | 50 PRINT "THAT PLAYER LOSES WHO FIRST MAKES THE SUM OF THE" 8 | 55 PRINT "THREE FIGURES IN ANY ROW, COLUMN, OR DIAGONAL" 9 | 60 PRINT "SOMETHING OTHER THAN 15."\PRINT 10 | 62 PRINT "A TIE GAME DRAWS A MAGIC SQUARE!!"\PRINT 11 | 65 PRINT "THE COMPUTER WILL ASK YOU ON EACH MOVE WHICH" 12 | 70 PRINT "CELL YOU WISH TO OCCUPY, AND THE NUMBER YOU WISH" 13 | 75 PRINT "TO PLACE IN THAT CELL. YOUR INPUT SHOULD LOOK" 14 | 80 PRINT "LIKE '3,7' IF YOU WISHED TO PLACE A 7 IN CELL 3." 15 | 85 PRINT \PRINT "HERE ARE THE CELL NUMBERS:"\PRINT 16 | 90 PRINT "1 2 3"\PRINT "4 5 6"\PRINT "7 8 9" 17 | 95 FOR I=1 TO 9\A(I)=0\B(I)=0\NEXT I\M=0\W=0 18 | 100 PRINT \ PRINT "YOUR MOVE -- CELL AND NUMBER"; \ INPUT I,N 19 | 105 IF I<1 THEN 130 20 | 106 IF I>9 THEN 130 21 | 107 IF N<1 THEN 130 22 | 108 IF N>9 THEN 130 23 | 110 IF A(I)=0 THEN IF B(N)=0 THEN 150 24 | 130 PRINT "ILLEGAL MOVE ... AGAIN,"\GOTO 100 25 | 150 A(I)=N\B(N)=1\M=M+1 \ REM AN ACCEPTABLE MOVE 26 | 170 GOSUB 960 \ REM PRINT BOARD 27 | 180 GOSUB 800 \ REM A LOSING MOVE?? 28 | 200 IF W=0 THEN 230 \ REM GOOD MOVE, NO WINNER YET 29 | 210 PRINT "SORRY, YOU LOSE -- NICE TRY."\GOTO 560 30 | 230 IF M<5 THEN 400 \ REM A TIE GAME? 31 | 240 PRINT "A TIE GAME -- BUT WE'VE DRAWN A MAGIC SQUARE!"\GOTO 560 32 | 400 FOR Q=1 TO 9 \ REM COMPUTER LOOKS FOR A GOOD MOVE 33 | 410 IF A(Q)>0 THEN 480 \ REM CELL TAKEN?? 34 | 420 FOR R=1 TO 9 35 | 430 IF B(R)>0 THEN 470 \ REM NUMBER TAKEN?? 36 | 435 A(Q)=R \ REM TRY MAKING THE MOVE 37 | 440 GOSUB 800 \ REM IS THIS MOVE A LOSER? 38 | 450 IF W=0 THEN 500 \ REM A GOOD MOVE** 39 | 460 Q1=Q\R1=R\W=0\A(Q)=0 \ REM RECORD BAD MOVE IN CASE NO GOOD ONE 40 | 470 NEXT R 41 | 480 NEXT Q 42 | 490 W=1\R=R1\Q=Q1\A(Q)=R \ REM IF GET HERE, COMPUTER HAS LOST 43 | 500 B(R)=1 \ REM COMPUTER MAKES ITS MOVE 44 | 520 PRINT "I MOVE TO CELL";Q;"WITH A";R 45 | 530 GOSUB 960 \ REM PRINT BOARD 46 | 540 IF W=0 THEN 100 \ REM THE GAME GOES ON.... 47 | 550 PRINT "I LOSE -- YOU WIN!!" 48 | 560 PRINT \PRINT CHR$(7); \ REM RINGS TELETYPE BELL 49 | 570 PRINT "LET'S PLAY AGAIN..."\GOTO 95 50 | 800 FOR X=1 TO 8 \ REM SUBROUTINE TO CHECK FOR LOSING MOVE 51 | 810 ON X GOTO 820,830,840,850,860,870,880,890 52 | 820 J=1\K=2\L=3\GOTO 900 53 | 830 K=4\L=7\GOTO 900 54 | 840 K=5\L=9\GOTO 900 55 | 850 J=4\L=6\GOTO 900 56 | 860 J=2\L=8\GOTO 900 57 | 870 J=3\L=7\GOTO 900 58 | 880 K=6\L=9\GOTO 900 59 | 890 J=7\K=8 60 | 900 IF A(J)=0 THEN 930 61 | 901 IF A(K)=0 THEN 930 62 | 902 IF A(L)=0 THEN 930 63 | 920 IF A(J)+A(K)+A(L)<>15 THEN 940 64 | 930 NEXT X 65 | 935 GOTO 950 66 | 940 W=1 \ REM A LOSER** 67 | 950 RETURN 68 | 960 PRINT \PRINT A(1);A(2);A(3) \ REM SUBROUTINE TO PRINT BOARD 69 | 970 PRINT A(4);A(5);A(6)\PRINT A(7);A(8);A(9)\PRINT \RETURN 70 | 999 END 71 | -------------------------------------------------------------------------------- /programs/mandel.bas: -------------------------------------------------------------------------------- 1 | 10 A=TTYSET(255,80) 2 | 20 FOR Y=-12 TO 12 3 | 30 FOR X=-39 TO 39 4 | 40 A0=X*.0458 5 | 50 B0=Y*.08333 6 | 60 A=A0 7 | 70 B=B0 8 | 80 FOR I=0 TO 15 9 | 90 T=A*A-B*B+A0 10 | 100 B=2*A*B+B0 11 | 110 A=T 12 | 120 IF (A*A+B*B)>4 GO TO 160 13 | 130 NEXT I 14 | 140 PRINT " "; 15 | 150 GO TO 180 16 | 160 IF I>9 THEN I=I+7 17 | 170 PRINT CHR$(48+I); 18 | 180 NEXT X 19 | 190 PRINT 20 | 200 NEXT Y 21 | -------------------------------------------------------------------------------- /programs/mastrmnd.bas: -------------------------------------------------------------------------------- 1 | 10 C$=CHR$(27)+"[2J" \ REM DISPLAY_CLEAR 2 | 11 DEF FNC$(X,Y)=CHR$(27)+"["+STR$(Y)+";"+STR$(X)+"H" \ REM MOVE_CURSOR(Y,X) 3 | 12 REM ---------------------------------------------------------------------- 4 | 13 REM *** THIS GAME OF MASTERMIND WRITTEN BY BOB PRESTWOOD OF THE T.A.C. *** 5 | 14 REM ---------------------------------------------------------------------- 6 | 15 PRINT "THIS IS THE GAME OF MASTERMIND - WOULD YOU LIKE THE RULES (Y/N)"; \ INPUT R5$ \ IF R5$="Y" THEN GOSUB 1000 7 | 20 RANDOMIZE 8 | 30 DIM X(4) 9 | 40 PRINT C$ \ PRINT FNC$(1,1); \ REM RESTART FROM HERE 10 | 45 GOSUB 600 11 | 50 REM LETS GO GET 4 RANDOM NUMBERS 12 | 60 FOR I=1 TO 4 13 | 70 GOSUB 550 14 | 80 N(I)=A 15 | 90 NEXT I 16 | 95 J=9 \ PRINT FNC$(1,J); 17 | 100 PRINT ,," GUESS"," RESULT" \ REM START GAME PROPER NOW 18 | 110 PRINT 19 | 120 FOR J=11 TO 20 \ REM 11 TO 19 = 10 GUESSES 20 | 130 PRINT FNC$(32,J); 21 | 140 PRINT " "; 22 | 150 PRINT FNC$(10,J); 23 | 160 PRINT "GUESS NUMBER ";J-10; 24 | 170 PRINT FNC$(30,J); 25 | 180 INPUT X$ \ REM INPUT A 4 FIGURE NO. 26 | 190 REM NOW MAKE SURE IT IS 4 FIGURES 27 | 200 L=LEN(X$) 28 | 210 IF L<4 THEN 130 29 | 220 IF L>4 THEN 130 30 | 230 FOR I=1 TO 4 31 | 240 REM NOW MAKE SURE WE HAVE ONLY NUMERALS AND STORE IN ARRAY X() 32 | 250 X$(I)=SEG$(X$,I,I) 33 | 260 IF X$(I)<"0" THEN 130 34 | 270 IF X$(I)>"9" THEN 130 35 | 280 X(I)=VAL(X$(I)) 36 | 290 NEXT I 37 | 300 REM NOW WE GO INTO CHECK GUESS MODE 38 | 310 PRINT FNC$(49,J); 39 | 320 C=0 40 | 330 FOR I=1 TO 4 \ REM CLEAR MARKERS LOOP 41 | 340 N1(I)=0 \ X1(I)=0 42 | 350 NEXT I 43 | 360 FOR I=1 TO 4 \ REM CHECK FOR *'s LOOP 44 | 370 IF X(I)=N(I) THEN X1(I)=1 \ N1(I)=1 \ PRINT "*"; \ C=C+1 45 | 380 IF C=4 THEN T=T+1 \ G1=G1+(J-10) \ G=G1/T \ GO TO 480 46 | 390 NEXT I 47 | 400 FOR I=1 TO 4 \ REM CHECK FOR ?'s LOOP 48 | 410 FOR K=1 TO 4 49 | 420 IF X1(I)=1 THEN 450 50 | 430 IF N1(K)=1 THEN 450 51 | 440 IF X(I)=N(K) THEN X1(I)=1 \ N1(K)=1 \ PRINT "?"; \ GO TO 460 52 | 450 NEXT K 53 | 460 NEXT I 54 | 470 NEXT J 55 | 480 PRINT \ PRINT \ PRINT ,N(1);N(2);N(3);N(4);" WAS THE CORRECT NUMBER" 56 | 490 PRINT ," *** YOU WERE "; \ IF C=4 THEN PRINT "RIGHT ***" \ Y=Y+1 57 | 500 IF C<>4 THEN PRINT "WRONG ***" \ M=M+1 58 | 505 GOSUB 600 59 | 510 REM AGAIN? 60 | 515 PRINT FNC$(1,24); 61 | 520 PRINT "AGAIN (Y/N)"; \ INPUT Q1$ 62 | 530 IF Q1$="Y" THEN 40 63 | 535 IF Q1$<>"N" THEN 510 64 | 540 GO TO 580 65 | 550 REM FIND A RANDOM NO. SUBROUTINE 66 | 560 A=INT(RND(1)*10) 67 | 570 RETURN 68 | 580 STOP 69 | 600 REM SUB TO PRINT SCORES 70 | 605 PRINT FNC$(1,1); 71 | 610 PRINT 72 | 620 PRINT ,," ** SCORES **" 73 | 625 PRINT 74 | 630 PRINT ,,"MINE","YOURS" 75 | 635 PRINT ,,," ";CHR$(13); 76 | 640 PRINT ,,M,Y 77 | 695 RETURN 78 | 1000 REM SUB TO PRINT THE RULES 79 | 1005 PRINT 80 | 1010 PRINT \ PRINT "I WILL THINK OF A 4 FIGURE NUMBER ALL YOU HAVE TO DO IS GUESS IT" 81 | 1015 PRINT 82 | 1020 PRINT "I WILL LET YOU HAVE TEN GUESSES (IF YOU NEED THAT MANY)" 83 | 1025 PRINT 84 | 1030 PRINT "EACH TIME YOU MAKE A GUESS I WILL:-" 85 | 1040 PRINT "1) INDICATE HOW MANY ARE RIGHT AND IN THE RIGHT POSITION WITH A "; 86 | 1050 PRINT CHR$(34);"*";CHR$(34);" IN THE RESULTS COLUMN" 87 | 1060 PRINT "2) INDICATE HOW MANY ARE RIGHT BUT IN THE WRONG POSITION WITH A "; 88 | 1070 PRINT CHR$(34);"?";CHR$(34);" IN THE RESULTS COLUMN" 89 | 1080 PRINT \ PRINT "I WILL ALSO KEEP THE SCORE" 90 | 1085 PRINT 91 | 1090 PRINT "HIT RETURN WHEN READY TO CONTINUE"; \ INPUT R5$ 92 | 1095 RETURN 93 | 1099 END 94 | -------------------------------------------------------------------------------- /programs/match.bas: -------------------------------------------------------------------------------- 1 | 100 REM THE PROGRAM 23 MATCHES 2 | 101 REM 3 | 110 PRINT "WE BEGIN WITH 23 MATCHES. YOU MOVE FIRST. YOU MAY TAKE" 4 | 115 PRINT "1, 2, OR 3 MATCHES. TYPE YOUR CHOICE FOLLOWED BY A CAR-" 5 | 120 PRINT "RIAGE RETURN. THEN THE COMPUTER CHOOSES 1, 2, OR 3" 6 | 125 PRINT "MATCHES. YOU CHOOSE AGAIN, AND SO ON. WHOEVER MUST" 7 | 130 PRINT "TAKE THE LAST MATCH, LOSES." 8 | 140 PRINT \ LET M=23 9 | 200 REM THE HUMAN MOVES 10 | 201 REM 11 | 210 PRINT \ PRINT "THERE ARE NOW";M;"MATCHES." 12 | 215 PRINT \ PRINT "HOW MANY DO YOU TAKE"; 13 | 230 INPUT H 14 | 240 IF H>M THEN 510 15 | 250 IF H<>INT(H) THEN 510 16 | 260 IF H<=0 THEN 510 17 | 270 IF H>=4 THEN 510 18 | 280 LET M=M-H 19 | 290 IF M=0 THEN 410 20 | 300 REM THE COMPUTER MOVES 21 | 301 REM 22 | 305 IF M=1 THEN 440 23 | 310 LET R=M-4*INT(M/4) 24 | 320 IF R<>1 THEN 350 25 | 330 LET C=INT(3*RND)+1 \ GO TO 360 26 | 350 LET C=(R+3)-4*INT((R+3)/4) 27 | 360 LET M=M-C 28 | 370 IF M=0 THEN 440 29 | 380 PRINT \ PRINT "THE COMPUTER TOOK";C;"...."; 30 | 390 GO TO 210 31 | 400 REM SOMEBODY WON 32 | 401 REM 33 | 410 PRINT \ PRINT "THE COMPUTER WON." \ GO TO 999 34 | 440 PRINT \ PRINT "YOU WON." \ GO TO 999 35 | 500 REM BAD INPUT 36 | 501 REM 37 | 510 PRINT "ENTER ONLY 1, 2, OR 3." \ GO TO 215 38 | 999 END 39 | -------------------------------------------------------------------------------- /programs/maze.bas: -------------------------------------------------------------------------------- 1 | 100 RANDOMIZE 2 | 280 PRINT "WHAT ARE YOUR LENGTH AND WIDTH (E. G. 13,10)"; 3 | 290 INPUT R9,C9 4 | 300 DIM W(25,23),V(25,23) 5 | 305 DIM D(10) 6 | 310 LET N9=R9*C9 7 | 320 FOR Q=1 TO R9 8 | 321 FOR Z=1 TO C9 9 | 322 LET W(Q,Z)=0 10 | 323 LET V(Q,Z)=0 11 | 324 NEXT Z 12 | 325 NEXT Q 13 | 340 LET B=0 14 | 360 LET F=INT(RND(B)*C9+1) 15 | 370 PRINT 16 | 380 FOR C=1 TO C9 17 | 390 IF C=F GOTO 420 18 | 400 PRINT ":--"; 19 | 410 GOTO 430 20 | 420 PRINT ": "; 21 | 430 NEXT C 22 | 440 PRINT ":" 23 | 450 LET R=1 24 | 460 LET C=F 25 | 470 LET N=1 26 | 480 LET W(R,C)=N 27 | 580 LET D=0 28 | 600 IF C=1 GOTO 650 29 | 610 IF W(R,C-1)>0GOTO 650 30 | 620 LET D=D+1 31 | 630 LET D(D)=1 32 | 650 IF C=C9 GOTO 700 33 | 660 IF W(R,C+1)>0GOTO 750 34 | 670 LET D=D+1 35 | 680 LET D(D)=2 36 | 700 IF R=1 GOTO 750 37 | 710 IF W(R-1,C)>0GOTO 750 38 | 720 LET D=D+1 39 | 730 LET D(D)=3 40 | 750 IF R0 GOTO 820 44 | 790 LET D=D+1 45 | 800 LET D(D)=4 46 | 820 IF D=0 GOTO 1100 47 | 830 LET X=INT(D*RND(X)+1) 48 | 840 IF D(X)=4 GOTO 980 49 | 841 IF D(X)=3 GOTO 940 50 | 842 IF D(X)=2 GOTO 900 51 | 860 LET C=C-1 52 | 870 LET V(R,C)=2 53 | 880 GOTO 1040 54 | 900 LET V(R,C)=V(R,C)+2 55 | 910 LET C=C+1 56 | 920 GOTO 1040 57 | 940 LET R=R-1 58 | 950 LET V(R,C)=1 59 | 960 GOTO 1040 60 | 980 LET V(R,C)=V(R,C)+1 61 | 990 LET R=R+1 62 | 1000 IF R<=R9 GOTO 1040 63 | 1010 LET B=1 64 | 1020 GOTO 1140 65 | 1040 LET N=N+1 66 | 1050 LET W(R,C)=N 67 | 1060 IF N0 GOTO 580 76 | 1170 GOTO 1100 77 | 1190 FOR R=1 TO R9 78 | 1200 PRINT "I"; 79 | 1210 FOR C=1 TO C9 80 | 1220 IF V(R,C)<2 GOTO 1250 81 | 1230 PRINT " "; 82 | 1240 GOTO 1260 83 | 1250 PRINT " I"; 84 | 1260 NEXT C 85 | 1270 PRINT 86 | 1280 FOR C=1 TO C9 87 | 1290 IF V(R,C)/2=INT(V(R,C)/2) GOTO 1320 88 | 1300 PRINT ": "; 89 | 1310 GOTO 1330 90 | 1320 PRINT ":--"; 91 | 1330 NEXT C 92 | 1340 PRINT ":" 93 | 1360 NEXT R 94 | 1370 STOP 95 | 9999 END 96 | -------------------------------------------------------------------------------- /programs/pattern.bas: -------------------------------------------------------------------------------- 1 | 1 REM *** WRITTEN BY DAVID AHL, DIGITAL 2 | 3 PRINT "FOR A PRETTY DIAMOND PATTERN," 3 | 4 PRINT "TYPE IN AN ODD NUMBER BETWEEN 5 AND 31." 4 | 5 INPUT R\PRINT 5 | 6 Q=INT(60/R) 6 | 8 FOR L=1 TO Q 7 | 10 X=1\Y=R\Z=2 8 | 20 FOR N=X TO Y STEP Z 9 | 25 PRINT TAB((R-N)/2); 10 | 28 FOR M=1 TO Q 11 | 29 C=1 12 | 30 FOR A=1 TO N 13 | 31 IF C=1 THEN 40 14 | 32 IF C=2 THEN 42 15 | 33 IF C=3 THEN 44 16 | 35 PRINT "!";\GOTO 50 17 | 40 PRINT "D";\GOTO 47 18 | 42 PRINT "E";\GOTO 47 19 | 44 PRINT "C"; 20 | 47 C=C+1 21 | 50 NEXT A 22 | 53 IF M=Q THEN 60 23 | 55 PRINT TAB(R*M+(R-N)/2); 24 | 56 NEXT M 25 | 60 PRINT 26 | 70 NEXT N 27 | 83 IF X<>1 THEN 95 28 | 85 X=R-2\Y=1\Z=-2 29 | 90 GOTO 20 30 | 95 NEXT L 31 | 99 END 32 | -------------------------------------------------------------------------------- /programs/pilot.bas: -------------------------------------------------------------------------------- 1 | 5 RANDOMIZE \PRINT "YOU ARE NOW A PILOT IN A WORLD WAR II BOMBER" 2 | 10 PRINT "WHAT SIDE -- ITALY(1), ALLIES(2), JAPANESE(3), GERMANY(4)";\INPUT A 3 | 20 IF A>0 THEN IF A<5 THEN 25 4 | 21 PRINT "TRY AGAIN..."\GOTO 10 5 | 25 ON A GOTO 30,110,200,220 6 | 30 PRINT "WHAT IS YOUR TARGET -- ALBANIA(1), GREECE(2), NORTH AFRICA(3)";\INPUT B 7 | 40 IF B>0 THEN IF B<4 THEN 45 8 | 41 PRINT "TRY AGAIN..."\GOTO 30 9 | 45 PRINT \ ON B GOTO 50,80,90 10 | 50 PRINT "SHOULD BE EASY. YOU'RE FLYING A NAZI-MADE PLANE." 11 | 60 GOTO 280 12 | 80 PRINT "BE CAREFUL!!!"\GOTO 280 13 | 90 PRINT "YOU'RE GOING FOR THE OIL, EH?"\GOTO 280 14 | 110 PRINT "AIRCRAFT -- LIBERATOR(1), B-29(2), B-17(3), LANCASTER(4)";\INPUT G 15 | 120 IF G>0 THEN IF G<5 THEN 125 16 | 121 PRINT "TRY AGAIN..."\GOTO 110 17 | 125 PRINT \ON G GOTO 130,150,170,190 18 | 130 PRINT "YOU'VE GOT 2 TONS OF BOMBS FLYING FOR PLOESTI." 19 | 140 GOTO 280 20 | 150 PRINT "YOU'RE DROPPING THE A-BOMB ON HIROSHIMA." 21 | 160 GOTO 280 22 | 170 PRINT "YOU'RE CHASING THE BISMARK IN THE NORTH SEA." 23 | 180 GOTO 280 24 | 190 PRINT "YOU'RE BUSTING A GERMAN HEAVY WATER PLANT IN THE RUHR." 25 | 195 GOTO 280 26 | 200 PRINT "YOU'RE FLYING A KAMIKAZE (SUICIDE BOMBER) OVER THE USS LEXINGTON." 27 | 205 PRINT "YOUR FIRST KAMIKAZE MISSION (Y OR N)";\INPUT F$ 28 | 208 IF F$="N" THEN S=0\GOTO 358 29 | 210 PRINT \IF RND>.65 THEN 325 30 | 211 GOTO 380 31 | 220 PRINT "A NAZI, EH? OH WELL. ARE YOU GOING FOR RUSSIA(1), ENGLAND(2)" 32 | 230 PRINT "OR FRANCE(3)";\INPUT M 33 | 231 IF M>0 THEN IF M<4 THEN 235 34 | 232 PRINT "WHAT??"\GOTO 220 35 | 235 PRINT \ON M GOTO 250,260,270 36 | 250 PRINT "YOU'RE NEARING STALINGRAD..."\GOTO 280 37 | 260 PRINT "NEARING LONDON. BE CAREFUL, THEY'VE GOT A GOOD AIR-RAID DEFENCE." 38 | 265 GOTO 280 39 | 270 PRINT "NEARING VERSAILLES. DUCK SOUP. THEY'RE NEARLY DEFENSELESS." 40 | 280 PRINT 41 | 285 PRINT "HOW MANY MISSIONS HAVE YOU FLOWN";\INPUT D 42 | 290 IF D<160 THEN 300 43 | 291 PRINT "MISSIONS, NOT MILES...." 44 | 295 PRINT "150 MISSIONS IS HIGH EVEN FOR OLD-TIMERS. NOW THEN,"\GOTO 285 45 | 300 PRINT \IF D<100 THEN 310 46 | 301 PRINT "THAT'S PUSHING THE ODDS!"\GOTO 320 47 | 310 IF D<25 THEN PRINT "FRESH OUT OF TRAINING, EH?" 48 | 320 PRINT \IF D<160*RND THEN 330 49 | 325 PRINT "DIRECT HIT!! ";INT(100*RND);"KILLED! MISSION SUCCESSFUL."\GOTO 390 50 | 330 PRINT "MISSED TARGET BY";INT(2+30*RND);"MILES!!" 51 | 335 PRINT "NOW YOU'RE REALLY IN FOR IT!!"\PRINT 52 | 340 PRINT "DOES THE ENEMY HAVE GUNS(1), MISSILES(2), OR BOTH(3)";\INPUT R 53 | 345 IF R>0 THEN IF R<4 THEN 350 54 | 346 PRINT "TRY AGAIN..."\GOTO 340 55 | 350 PRINT \IF R=2 THEN 360 56 | 355 PRINT "WHAT IS THE PERCENT HIT RATE OF THE ENEMY GUNNERS (10 TO 50)";\INPUT S 57 | 358 IF S<10 THEN PRINT "YOU LIE, BUT YOU'LL PAY..."\PRINT \GOTO 380 58 | 360 PRINT \IF R>1 THEN T=35 59 | 365 IF S+T>100*RND THEN 380 60 | 370 PRINT "YOU MADE IT THROUGH TREMENDOUS FLAK!!"\GOTO 390 61 | 380 PRINT "* * * * * BOOM * * * * *" 62 | 384 PRINT "YOU HAVE BEEN SHOT DOWN..." 63 | 386 PRINT "DEARLY BELOVED, WE ARE GATHERED HERE TODAY TO PAY OUR LAST TRIBUTE..." 64 | 390 PRINT \PRINT \PRINT \PRINT "PLAY AGAIN (Y OR N)";\INPUT U$\IF U$="Y" THEN 10 65 | 400 PRINT "CHICKEN!!!!!"\PRINT \PRINT 66 | 999 END 67 | -------------------------------------------------------------------------------- /programs/poem.bas: -------------------------------------------------------------------------------- 1 | 90 RANDOMIZE 2 | 100 GO TO 110 3 | 110 LET D=0 4 | 120 LET D=D+1 5 | 130 GO TO 1300 6 | 140 PRINT "THE HOURS RISE UP PUTTING OFF STARS" 7 | 150 LET A1=1 8 | 160 LET D=D+1 9 | 170 PRINT " AND IT IS DAWN" 10 | 180 GO TO 1350 11 | 190 PRINT "INTO THE STREET OF THE SKY LIGHT" 12 | 200 LET A2=1 13 | 210 LET D=D+1 14 | 220 PRINT " WALKS SCATTERING POEMS" 15 | 230 GO TO 1350 16 | 240 PRINT "ON EARTH A CANDLE IS EXTINGUISED" 17 | 250 LET A3=1 18 | 260 LET D=D+1 19 | 270 PRINT " THE CITY WAKES" 20 | 280 GO TO 1350 21 | 290 PRINT "WITH A SONG UPON HER MOUTH" 22 | 300 LET A4=1 23 | 310 LET D=D+1 24 | 320 PRINT " HAVING DEATH IN HER EYES" 25 | 330 GO TO 1350 26 | 340 PRINT "AND IT IS DAWN" 27 | 350 PRINT " THE WORLD" 28 | 360 LET A5=1 29 | 370 LET D=D+1 30 | 380 PRINT " GOES FORTH TO MURDER DREAMS" 31 | 390 GO TO 1350 32 | 400 PRINT " AND IT IS DAY" 33 | 410 LET C5=1 34 | 420 LET D=D+1 35 | 430 GO TO 1350 36 | 440 PRINT "IN THE MIRROR I SEE A MAN, AND HE" 37 | 450 PRINT " SCREAMS" 38 | 460 LET D=D+1 39 | 470 LET C5=1 40 | 480 PRINT "FOR HE IS ME" 41 | 490 LET D=D+1 42 | 500 PRINT " AND I HE" 43 | 510 GO TO 1350 44 | 520 PRINT "AND IT IS DUSK" 45 | 530 LET A7=1 46 | 540 LET D=D+1 47 | 550 PRINT " ON EARTH" 48 | 560 GO TO 1350 49 | 570 PRINT "A CANDLE IS LIGHTED" 50 | 580 LET A8=1 51 | 590 LET D=D+1 52 | 600 PRINT " AND IT IS DARK" 53 | 610 GO TO 1350 54 | 620 PRINT " THE PEOPLE ARE IN THEIR HOUSES" 55 | 630 LET A9=1 56 | 640 LET D=D+1 57 | 650 GO TO 1350 58 | 660 PRINT "SHE SLEEPS WITH DEATH UPON HER MOUTH" 59 | 670 LET B1=1 60 | 680 LET D=D+1 61 | 690 PRINT " AND A SONG IN HER EYES" 62 | 700 GO TO 1350 63 | 710 PRINT " THE HOURS DESENDED" 64 | 720 LET B2=1 65 | 730 LET D=D+1 66 | 740 PRINT " PUTTING ON STARS" 67 | 750 GO TO 1350 68 | 760 PRINT "NOBODY LOSES ALL THE TIME " 69 | 770 LET B3=1 70 | 780 LET D=D+1 71 | 790 GO TO 1350 72 | 800 PRINT "HIS MOST WISE MUSIC STOLE" 73 | 810 LET B4=1 74 | 820 LET D=D+1 75 | 830 PRINT " NOTHING FROM DEATH" 76 | 840 GO TO 1350 77 | 850 PRINT "LOVE IS THE EVER ONLY GOD" 78 | 860 LET B5=1 79 | 870 LET D=D+1 80 | 880 GO TO 1350 81 | 890 PRINT "WHO SPOKE THIS EARTH SO GLAD AND BIG" 82 | 900 LET B6=1 83 | 910 LET D=D+1 84 | 920 PRINT " EVEN A THING ALL SMALL AND SAD" 85 | 930 GO TO 1350 86 | 940 PRINT "WHO IS AFRAID OF DEATH? THOU" 87 | 950 LET B7=1 88 | 960 LET D=D+1 89 | 970 PRINT " ART OF HIM" 90 | 980 GO TO 1350 91 | 990 PRINT "OR WITH THY MIND AGAINST MY MIND," 92 | 1000 LET B8=1 93 | 1010 LET D=D+1 94 | 1020 PRINT " YOU SHOULD NOT HEAR ME SPEAK" 95 | 1030 GO TO 1350 96 | 1040 PRINT "FOR IF HE IS GONE AND I AM HERE" 97 | 1050 LET B9=1 98 | 1060 LET D=D+1 99 | 1070 PRINT " THERE IS NO MEETING" 100 | 1080 GO TO 1350 101 | 1090 PRINT " TIME IS TWISTED TO LAP UPON" 102 | 1100 LET C1=1 103 | 1110 LET D=D+1 104 | 1120 PRINT " ITSELF FOREVER" 105 | 1130 GO TO 1350 106 | 1140 PRINT "AND SPACE IS MISING FOR IT WAS " 107 | 1150 LET C2=1 108 | 1160 LET D=D+1 109 | 1170 PRINT "STOLEN FOR ALL TIME TO COME " 110 | 1180 GO TO 1350 111 | 1190 PRINT "THERE IS NEVER AN END," 112 | 1200 LET C3=1 113 | 1210 LET D=D+1 114 | 1220 PRINT " MERELY A BELATED BEGINING..." 115 | 1230 GO TO 1350 116 | 1240 PRINT "AND TWICE REPEATED THERE" 117 | 1250 LET C4=1 118 | 1260 PRINT " WAS NO MORE" 119 | 1270 GO TO 1350 120 | 1280 PRINT 121 | 1281 D=D+1 122 | 1290 GO TO 1350 123 | 1300 PRINT " RANDOM POETRY IN FOUR PART HARMONY." 124 | 1310 PRINT 125 | 1320 PRINT 126 | 1330 IF Q=INT(Q) THEN 1280 127 | 1340 IF D=12 THEN 2330 128 | 1350 LET X=RND(-1)*24 129 | 1360 LET X1=INT(X)+1 130 | 1361 IF D=4 THEN 1280 131 | 1362 IF D=8 THEN 1280 132 | 1363 IF D>16 THEN 2330 133 | 1370 IF X1=1 THEN 1390 134 | 1380 GO TO 1410 135 | 1390 IF A1=1 THEN 1410 136 | 1400 IF X1=1 THEN 140 137 | 1410 IF X1=2 THEN 1430 138 | 1420 GO TO 1450 139 | 1430 IF A2=1 THEN 1450 140 | 1440 IF X1=2 THEN 290 141 | 1450 IF X1=3 THEN 1470 142 | 1460 GO TO 1490 143 | 1470 IF A3=1 THEN 1490 144 | 1480 IF X1=3 THEN 190 145 | 1490 IF X1=4 THEN 1510 146 | 1500 GO TO 1530 147 | 1510 IF A4=1 THEN 1530 148 | 1520 IF X1=4 THEN 240 149 | 1530 IF X1=5 THEN 1550 150 | 1540 GO TO 1570 151 | 1550 IF A5=1 THEN 1570 152 | 1560 IF X1=5 THEN 340 153 | 1570 IF X1=6 THEN 1590 154 | 1580 GO TO 1610 155 | 1590 IF A6=1 THEN 1610 156 | 1600 IF X1=6 THEN 400 157 | 1610 IF X1=7 THEN 1630 158 | 1620 GO TO 1650 159 | 1630 IF A7=1 THEN 1650 160 | 1640 GO TO 520 161 | 1650 IF X1=8 THEN 1670 162 | 1660 GO TO 1690 163 | 1670 IF A8=1 THEN 1690 164 | 1680 GO TO 570 165 | 1690 IF X1=9 THEN 1710 166 | 1700 GO TO 1730 167 | 1710 IF A9=1 THEN 1730 168 | 1720 GO TO 620 169 | 1730 IF X1=10 THEN 1750 170 | 1740 GO TO 1780 171 | 1750 GO TO 1760 172 | 1760 IF B1=1 THEN 1780 173 | 1770 GO TO 660 174 | 1780 IF X1=11 THEN 1800 175 | 1790 GO TO 1820 176 | 1800 IF B2=1 THEN 1820 177 | 1810 GO TO 710 178 | 1820 IF X1=12 THEN 1840 179 | 1830 GO TO 1860 180 | 1840 IF B3=1 THEN 1860 181 | 1850 GO TO 760 182 | 1860 IF X1=13 THEN 1880 183 | 1870 GO TO 1900 184 | 1880 IF B4=1 THEN 1900 185 | 1890 GO TO 800 186 | 1900 IF X1=14 THEN 1920 187 | 1910 GO TO 1940 188 | 1920 IF B5=1 THEN 1840 189 | 1930 GO TO 850 190 | 1940 IF X1=15 THEN 1960 191 | 1950 GO TO 1980 192 | 1960 IF B6=1 THEN 1980 193 | 1970 GO TO 890 194 | 1980 IF X1=16 THEN 2000 195 | 1990 GO TO 2020 196 | 2000 IF B7=1 THEN 2020 197 | 2010 GO TO 940 198 | 2020 IF X1=17 THEN 2040 199 | 2030 GO TO 2060 200 | 2040 IF B8=1 THEN 2060 201 | 2050 GO TO 990 202 | 2060 IF X1=18 THEN 2080 203 | 2070 GO TO 2100 204 | 2080 IF B9=1 THEN 2100 205 | 2090 GO TO 1040 206 | 2100 IF X1=19 THEN 2120 207 | 2110 GO TO 2140 208 | 2120 IF C1=1 THEN 2140 209 | 2130 GO TO 1090 210 | 2140 IF X1=20 THEN 2160 211 | 2150 GO TO 2180 212 | 2160 IF C2=1 THEN 2180 213 | 2170 GO TO 1140 214 | 2180 IF X1=21 THEN 2200 215 | 2190 GO TO 2220 216 | 2200 IF C3=1 THEN 2220 217 | 2210 GO TO 1190 218 | 2220 IF X1=22 THEN 2240 219 | 2230 GO TO 2260 220 | 2240 IF C4=1 THEN 2260 221 | 2250 GO TO 1240 222 | 2260 IF X1=23 THEN 2280 223 | 2270 GO TO 2300 224 | 2280 IF C5=1 THEN 2300 225 | 2290 GO TO 440 226 | 2300 GO TO 2320 227 | 2310 IF X1=24 THEN 1280 228 | 2320 GO TO 1350 229 | 2330 PRINT 230 | 2340 PRINT 231 | 2350 PRINT " BY A. COM PUTER." 232 | 2360 END 233 | -------------------------------------------------------------------------------- /programs/puzzle.bas: -------------------------------------------------------------------------------- 1 | 10 REM *** CONVERTED TO RSTS/E BY DAVID AHL, DIGITAL 2 | 20 REM *** CREATED BY MICHAEL KASS HERRICKS HS, NY 3 | 30 PRINT "THE OBJECT OF THIS PUZZLE IS TO CHANGE THIS:" 4 | 40 PRINT 5 | 50 PRINT "X X X X X X X X X X" 6 | 60 PRINT 7 | 70 PRINT "TO THIS:" 8 | 80 PRINT 9 | 90 PRINT "O O O O O O O O O O" 10 | 100 PRINT 11 | 110 PRINT "BY TYPING IN THE NUMBER CORRESPONDING TO THE POSITION OF THE LETTER" 12 | 120 PRINT "ON SOME NUMBERS, ONE POSITION WILL CHANGE; ON OTHERS, TWO WILL CHANGE." 13 | 130 PRINT "TO RESET A LINE TO ALL X'S, TYPE 0 (ZERO) AND TO START A NEW PUZZLE" 14 | 140 PRINT "IN THE MIDDLE OF A GAME, TYPE 11 (ELEVEN)." 15 | 150 PRINT \ PRINT "UNFORTUNATELY, SOME OF THESE PUZZLES DO NOT HAVE A SOLUTION!" \ PRINT 16 | 160 PRINT \ DIM A$(20) 17 | 170 DEF FNT(X)=SIN(X)/COS(X) \ REM TANGENT 18 | 180 RANDOMIZE 19 | 190 LET Q=RND 20 | 200 PRINT "HERE IS THE STARTING LINE OF X'S:" 21 | 210 PRINT 22 | 220 LET C=0 23 | 230 PRINT "1 2 3 4 5 6 7 8 9 10" 24 | 240 PRINT "X X X X X X X X X X" 25 | 250 PRINT 26 | 260 M=0 27 | 270 FOR X=1 TO 10 28 | 280 LET A$(X)="X" 29 | 290 NEXT X 30 | 300 GO TO 320 31 | 310 PRINT "ILLEGAL ENTRY--TRY AGAIN" 32 | 320 PRINT "INPUT THE NUMBER"; 33 | 330 INPUT N 34 | 340 IF N<>INT(N) THEN 310 35 | 350 IF N=11 THEN 190 36 | 360 IF N>11 THEN 310 37 | 370 IF N=0 THEN 230 38 | 380 IF M=N THEN 510 39 | 390 LET M=N 40 | 400 IF A$(N)="O" THEN 480 41 | 410 LET A$(N)="O" 42 | 420 LET R=FNT(Q+N/Q-N)-SIN(Q/N)+336*SIN(.8*N) 43 | 430 LET N=R-INT(R) 44 | 440 LET N=INT(10*N) 45 | 450 IF A$(N)="O" THEN 480 46 | 460 LET A$(N)="O" 47 | 470 GO TO 610 48 | 480 LET A$(N)="X" 49 | 490 IF M=N THEN 420 50 | 500 GO TO 610 51 | 510 IF A$(N)="O" THEN 590 52 | 520 LET A$(N)="O" 53 | 530 R=.592/FNT(Q/N+Q)/SIN(N*2+Q)-COS(N) 54 | 540 LET N=R-INT(R) 55 | 550 LET N=INT(10*N) 56 | 560 IF A$(N)="O" THEN 590 57 | 570 LET A$(N)="O" 58 | 580 GO TO 610 59 | 590 LET A$(N)="X" 60 | 600 IF M=N THEN 530 61 | 610 PRINT "1 2 3 4 5 6 7 8 9 10" 62 | 620 FOR Z=1 TO 10 \ PRINT A$(Z);" "; \ NEXT Z 63 | 630 LET C=C+1 64 | 640 PRINT \ PRINT 65 | 650 FOR Z=1 TO 10 66 | 660 IF A$(Z)<>"O" THEN 320 67 | 670 NEXT Z 68 | 680 IF C>12 THEN 710 69 | 690 PRINT "VERY GOOD. YOU GUESSED IT IN ONLY ";C;"GUESSES!!!!" 70 | 700 GO TO 720 71 | 710 PRINT "TRY HARDER NEXT TIME, IT TOOK YOU ";C;"GUESSES" 72 | 720 PRINT "DO YOU WANT TO DO ANOTHER PUZZLE"; 73 | 730 INPUT X$ 74 | 740 IF X$="NO" THEN 770 75 | 750 PRINT 76 | 760 GO TO 190 77 | 770 PRINT \ PRINT "OKAY. SO LONG FOR NOW." \ PRINT \ END 78 | -------------------------------------------------------------------------------- /programs/reverse.bas: -------------------------------------------------------------------------------- 1 | 80 REM *** REVERSE WRITTEN BY BOB ALBRECHT, PEOPLE'S COMPUTER CO 2 | 90 REM *** MODIFIED AND CONVERTED TO BASIC-PLUS BY DAVID AHL 3 | 100 PRINT \PRINT "REVERSE -- A GAME OF SKILL"\PRINT 4 | 120 RANDOMIZE 5 | 130 DIM A(20) 6 | 140 REM *** N=NUMBER OF NUMBERS 7 | 150 N=9\G=0\T1=0 8 | 160 PRINT "DO YOU WANT THE RULES (YES OR NO)"; \ INPUT A$ 9 | 180 IF A$="NO" THEN 210 10 | 190 GOSUB 710 11 | 200 REM *** MAKE A RANDOM LIST A(1) TO A(N) 12 | 210 A(1)=INT((N-1)*RND)+2 13 | 220 FOR K=2 TO N 14 | 230 A(K)=INT(N*RND)+1 15 | 240 FOR J=1 TO K-1 16 | 250 IF A(K)=A(J) THEN 230 17 | 260 NEXT J\NEXT K 18 | 280 REM *** PRINT ORIGNIAL LIST AND START GAME 19 | 290 PRINT \PRINT "HERE WE GO ... THE LIST IS:" 20 | 310 T=0 21 | 320 GOSUB 610 22 | 330 PRINT "HOW MANY SHALL I REVERSE"; \ INPUT R 23 | 340 IF R=1 THEN PRINT "OOPS! ONE DOESN'T DO ANYTHING. AGAIN..."\GOTO 330 24 | 350 IF R=0 THEN 530 25 | 360 IF R<=N THEN 390 26 | 370 PRINT "OOPS! TOO MANY - I CAN REVERSE AT MOST";N\GOTO 330 27 | 390 T=T+1 28 | 400 REM *** REVERSE R NUMBERS AND PRINT NEW LIST 29 | 410 FOR K=1 TO INT(R/2) 30 | 420 Z=A(K) 31 | 430 A(K)=A(R-K+1) 32 | 440 A(R-K+1)=Z 33 | 450 NEXT K 34 | 460 GOSUB 610 35 | 470 REM *** CHECK FOR A WIN 36 | 480 FOR K=1 TO N 37 | 490 IF A(K)<>K THEN 330 38 | 500 NEXT K 39 | 510 PRINT "YOU WON IT IN";T;"MOVES !!!"\PRINT 40 | 520 G=G+1\T1=T1+T 41 | 530 PRINT "TRY AGAIN (YES OR NO)"; \ INPUT A$ 42 | 550 IF A$="YES" THEN 210 43 | 560 PRINT \ PRINT "YOU PLAYED";G;"GAMES AND REVERSED THE LISTS IN AN" 44 | 570 PRINT "AVERAGE OF";T1/G;"MOVES PER GAME. HOPE YOU HAD FUN!"\GOTO 999 45 | 600 REM *** SUBROUTINE TO PRINT LIST 46 | 610 PRINT \FOR K=1 TO N\PRINT A(K);\NEXT K 47 | 650 PRINT \PRINT \RETURN 48 | 700 REM *** SUBROUTINE TO PRINT THE RULES 49 | 710 PRINT \PRINT "THIS IS THE GAME OF 'REVERSE'. TO WIN, ALL YOU HAVE" 50 | 720 PRINT "TO DO IS ARRANGE A LIST OF NUMBERS (1 THROUGH ";STR$(N);")" 51 | 730 PRINT "IN NUMERICAL ORDER FROM LEFT TO RIGHT. TO MOVE, YOU" 52 | 740 PRINT "TELL ME HOW MANY NUMBERS (COUNTING FROM THE LEFT) TO" 53 | 750 PRINT "REVERSE. FOR EXAMPLE, IF THE CURRENT LIST IS:" 54 | 760 PRINT \PRINT "2 3 4 5 1 6 7 8 9" 55 | 770 PRINT \PRINT "AND YOU REVERSE 4, THE RESULT WILL BE:" 56 | 780 PRINT \PRINT "5 4 3 2 1 6 7 8 9" 57 | 790 PRINT \PRINT "NOW, IF YOU REVERSE 5, YOU WIN!" 58 | 800 PRINT \PRINT "1 2 3 4 5 6 7 8 9"\PRINT 59 | 810 PRINT "NO DOUBT YOU WILL LIKE THIS GAME OF SKILL, BUT" 60 | 820 PRINT "IF YOU WANT TO QUIT, REVERSE 0 (ZERO)."\PRINT \RETURN 61 | 999 END 62 | -------------------------------------------------------------------------------- /programs/rocket.bas: -------------------------------------------------------------------------------- 1 | 5 REM **** WRITTEN BY ERIC PETERS, DIGITAL 2 | 10 REM *** CONVERTED TO RSTS/E BY DAVID AHL, DIGITAL 3 | 70 PRINT "LUNAR LANDING SIMULATION" 4 | 80 PRINT "----- ------- ----------" \ PRINT 5 | 100 PRINT "DO YOU WANT INSTRUCTIONS (YES OR NO)" \ INPUT A$ 6 | 120 IF A$="NO" THEN 390 7 | 160 PRINT 8 | 200 PRINT "YOU ARE LANDING ON THE MOON AND HAVE TAKEN OVER MANUAL" 9 | 210 PRINT "CONTROL 500 FEET ABOVE A GOOD LANDING SPOT. YOU HAVE A" 10 | 220 PRINT "DOWNWARD VELOCITY OF 50 FT/SEC. 120 UNITS OF FUEL REMAIN." 11 | 225 PRINT 12 | 230 PRINT "HERE ARE THE RULES THAT GOVERN YOUR SPACE VEHICLE:" 13 | 240 PRINT "(1) AFTER EACH SECOND, THE HEIGHT, VELOCITY, AND REMAINING" 14 | 250 PRINT " FUEL WILL BE REPORTED." 15 | 260 PRINT "(2) AFTER THE REPORT, A '?' WILL BE TYPED. ENTER THE" 16 | 270 PRINT " NUMBER OF UNITS OF FUEL YOU WISH TO BURN DURING THE" 17 | 280 PRINT " NEXT SECOND. EACH UNIT OF FUEL WILL SLOW YOUR DESCENT" 18 | 290 PRINT " BY 1 FT/SEC." 19 | 310 PRINT "(3) THE MAXIMUM THRUST OF YOUR ENGINE IS 30 FT/SEC/SEC OR" 20 | 320 PRINT " 30 UNITS OF FUEL PER SECOND." 21 | 330 PRINT "(4) WHEN YOU CONTACT THE LUNAR SURFACE, YOUR DESCENT ENGINE" 22 | 340 PRINT " WILL AUTOMATICALLY CUT OFF AND YOU WILL BE GIVEN A" 23 | 350 PRINT " REPORT OF YOUR LANDING SPEED AND REMAINING FUEL." 24 | 360 PRINT "(5) IF YOU RUN OUT OF FUEL, THE '?' WILL NO LONGER APPEAR," 25 | 370 PRINT " BUT YOUR SECOND BY SECOND REPORT WILL CONTINUE UNTIL" 26 | 380 PRINT " YOU CONTACT THE LUNAR SURFACE." \ PRINT 27 | 390 PRINT "BEGINNING LANDING PROCEDURE....." \ PRINT 28 | 410 PRINT "G O O D L U C K ! ! !" 29 | 420 PRINT \ PRINT 30 | 440 PRINT "SEC FEET SPEED FUEL PLOT OF DISTANCE" 31 | 450 PRINT 32 | 455 T=0 \ H=500 \ V=50 \ F=120 33 | 490 PRINT T;TAB(4);H;TAB(12);V;TAB(20);F;TAB(29);"I";TAB(H/12+29);"*" 34 | 500 INPUT B 35 | 510 IF B<0 THEN 650 36 | 520 IF B>30 THEN B=30 37 | 530 IF B>F THEN B=F 38 | 540 V1=V-B+5 39 | 560 F=F-B 40 | 570 H=H-.5*(V+V1) 41 | 580 IF H<=0 THEN 670 42 | 590 T=T+1 43 | 600 V=V1 44 | 610 IF F>0 THEN 490 45 | 615 IF B=0 THEN 640 46 | 620 PRINT "*** OUT OF FUEL ***" 47 | 640 PRINT T;TAB(4);H;TAB(12);V;TAB(20);F;TAB(29);"I";TAB(H/12+29);"*" 48 | 650 B=0 49 | 660 GO TO 540 50 | 670 PRINT "*** CONTACT ***" 51 | 680 H=H+.5*(V+V1) 52 | 690 IF B=5 THEN 720 53 | 700 D=(-V+SQR(V*V+H*(10-2*B)))/(5-B) 54 | 710 GO TO 730 55 | 720 D=H/V 56 | 730 V1=V+(5-B)*D 57 | 760 PRINT "TOUCHDOWN AT";T+D;"SECONDS." 58 | 770 PRINT "LANDING VELOCITY =";V1;"FT/SEC" 59 | 780 PRINT F;"UNITS OF FUEL REMAINING." 60 | 790 IF V1<>0 THEN 810 61 | 800 PRINT "CONGRATULATIONS!! A PERFECT LANDING!" 62 | 805 PRINT "YOUR LICENSE WILL BE RENEWED.......LATER." 63 | 810 IF ABS(V1)<2 THEN 840 64 | 820 PRINT "***** SORRY, BUT YOU BLEW IT!!!!" 65 | 830 PRINT "APPROPRIATE CONDOLENCES WILL BE SENT TO YOUR NEXT OF KIN." 66 | 840 PRINT \ PRINT \ PRINT 67 | 850 PRINT " ANOTHER MISSION (YES OR NO)" \ INPUT A$ 68 | 870 IF A$="YES" THEN 390 69 | 880 PRINT \ PRINT "CONTROL OUT." \ PRINT 70 | 999 END 71 | -------------------------------------------------------------------------------- /programs/rocket.txt: -------------------------------------------------------------------------------- 1 | This fuel usage sequence works: 2 | 3 | 0 0 0 0 0 15 25 25 25 6 6 6 6 6 4 | 5 | 14 seconds, landing velocity 0! 6 | -------------------------------------------------------------------------------- /programs/roll.bas: -------------------------------------------------------------------------------- 1 | 1000 S%=25% 2 | 1100 W%=10% 3 | 1150 U%=30% 4 | 1200 PRINT CHR$(27%);"<";CHR$(27%);"[?1h";CHR$(27%);"[?4h" 5 | 1400 PRINT CHR$(27%);"(0";CHR$(27%);"[2J" 6 | 1500 PRINT CHR$(27%);"[1;1H"; 7 | 2000 RANDOMIZE 8 | 2100 R%=INT(RND*10) 9 | 2200 IF R%=1% THEN S%=S%+1% 10 | 2300 IF R%=2% THEN S%=S%+2% 11 | 2400 IF R%=3% THEN S%=S%+3% 12 | 2500 IF R%=4% THEN S%=S%+4% 13 | 2600 IF R%=5% THEN S%=S%-1% 14 | 2700 IF R%=6% THEN S%=S%-2% 15 | 2800 IF R%=7% THEN S%=S%-3% 16 | 2900 IF R%=8% THEN S%=S%-4% 17 | 2930 IF S%>50% THEN S%=S%-2% 18 | 2960 IF S%S%+W% THEN 3400 22 | 3250 PRINT " "; 23 | 3300 GO TO 3500 24 | 3400 PRINT "a"; 25 | 3500 NEXT I% 26 | 3600 PRINT CHR$(27%);"M" 27 | 3700 PRINT CHR$(27%);"[1;1H"; 28 | 9000 GO TO 2000 29 | -------------------------------------------------------------------------------- /programs/rotate.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT "GAME OF 'ROTATE' BY DAVE AHL. ENJOY !!"\ PRINT 2 | 12 PRINT "INSTRUCTIONS (Y OR N)";\ INPUT A$\ PRINT \IF A$="N" THEN 140 3 | 15 PRINT "IN THIS GAME THE BOARD IS LAID OUT AS FOLLOWS:" 4 | 20 DIM B(16),B$(16)\RANDOMIZE 5 | 25 FOR I=1 TO 16\ B(I)=I \ NEXT I 6 | 30 PRINT \FOR I=1 TO 13 STEP 4 7 | 35 PRINT USING "## ## ## ##",B(I),B(I+1),B(I+2),B(I+3) 8 | 40 NEXT I\ PRINT 9 | 45 PRINT "BOARD POSITIONS ARE OCCUPIED RANDOMLY BY THE LETTERS A TO P." 10 | 50 PRINT "THE OBJECT OF THE GAME IS TO ORDER THE LETTERS BY ROTATING" 11 | 55 PRINT "ANY FOUR LETTERS CLOCKWISE ONE POSITION. YOU SPECIFY THE" 12 | 60 PRINT "UPPER LEFT POSITION OF THE FOUR YOU WISH TO ROTATE, I.E.," 13 | 65 PRINT "VALID MOVES ARE 1, 2, 3, 5, 6, 7, 9, 10, AND 11." 14 | 70 PRINT "CONSEQUENTLY, IF THE BOARD LOOKED LIKE:" 15 | 75 FOR I=1 TO 16\B$(I)=CHR$(I+64)\NEXT I\B$(2)="C"\B$(3)="G" 16 | 80 B$(6)="B"\B$(7)="F"\GOSUB 400 17 | 85 PRINT "AND YOU ROTATED POSITION 2, THE BOARD WOULD BE:" 18 | 90 FOR I=2 TO 7\B$(I)=CHR$(I+64)\NEXT I\GOSUB 400 19 | 95 PRINT "AND YOU WOULD WIN !"\ PRINT 20 | 100 PRINT "YOU ALSO GET ONE 'SPECIAL' MOVE PER GAME WHICH YOU MAY OR" 21 | 105 PRINT "MAY NOT NEED. THE SPECIAL MOVE ALLOWS YOU TO EXCHANGE" 22 | 110 PRINT "ANY TWO ADJACENT LETTERS IN A ROW. TO MAKE THIS MOVE," 23 | 115 PRINT "INPUT A '-1' AS YOUR MOVE AND YOU WILL BE ASKED FOR THE" 24 | 120 PRINT "POSITIONS OF THE TWO LETTERS TO EXCHANGE. REMEMBER -- " 25 | 125 PRINT "ONLY ONE SPECIAL MOVE PER GAME!"\ PRINT 26 | 130 PRINT "TO GIVE UP AT ANY TIME, TYPE A '0'."\ PRINT \ PRINT "GOOD LUCK !"\ PRINT 27 | 140 FOR I=1 TO 16\B$(I)="0"\NEXT I 28 | 150 FOR I=1 TO 16 29 | 160 T$=CHR$(INT(16*RND+65)) 30 | 165 FOR J=1 TO I 31 | 170 IF B$(J)=T$ THEN 160 32 | 175 NEXT J 33 | 180 B$(I)=T$\NEXT I 34 | 190 M=0\S=0\ PRINT "HERE'S THE STARTING BOARD..."\GOSUB 400 35 | 200 PRINT "POSITION TO ROTATE";\ INPUT I\IF I=0 THEN PRINT \ PRINT \GOTO 140 36 | 205 IF I=-1 THEN 510 37 | 210 IF I=4 THEN 215 38 | 211 IF I=8 THEN 215 39 | 212 IF I>12 THEN 215 40 | 213 GOTO 220 41 | 215 PRINT "ILLEGAL. AGAIN..."\GOTO 200 42 | 220 M=M+1\T$=B$(I) 43 | 230 B$(I)=B$(I+4)\B$(I+4)=B$(I+5)\B$(I+5)=B$(I+1)\B$(I+1)=T$ 44 | 240 GOSUB 400\REM *** PRINT BOARD 45 | 300 REM *** DO WE HAVE A WINNER? 46 | 305 FOR I=1 TO 16 47 | 310 IF CHR$(I+64)<>B$(I) THEN 200 48 | 315 NEXT I 49 | 320 PRINT \ PRINT "YOU ORDERED THE BOARD IN";M;"MOVES."\M1=M1+M\G=G+1 50 | 325 FOR I=1 TO 15\PRINT CHR$(7);\NEXT I 51 | 330 PRINT \PRINT "PLAY AGAIN (Y OR N)";\ INPUT A$\IF A$="Y" THEN 140 52 | 340 PRINT \ PRINT "YOU PLAYED";G;"GAMES AND ORDERED THE BOARD IN AN AVERAGE" 53 | 350 PRINT "OF";M1/G;"MOVES PER GAME."\ PRINT \GOTO 999 54 | 390 REM *** PRINT BOARD SUBROUTINE 55 | 400 PRINT \FOR I=1 TO 13 STEP 4 56 | 410 PRINT B$(I);" ";B$(I+1);" ";B$(I+2);" ";B$(I+3) 57 | 420 NEXT I\ PRINT \RETURN 58 | 500 REM *** SPECIAL MOVE SUBROUTINE 59 | 510 PRINT "EXCHANGE WHICH TWO POSITIONS";\ INPUT X,Y 60 | 520 IF X<>Y+1 THEN IF X<>Y-1 THEN PRINT "ILLEGAL. AGAIN..."\GOTO 510 61 | 530 S=S+1\IF S>1 THEN PRINT "ONLY ONE SPECIAL MOVE PER GAME."\GOTO 200 62 | 540 T$=B$(X)\B$(X)=B$(Y)\B$(Y)=T$\GOTO 240 63 | 999 END 64 | -------------------------------------------------------------------------------- /programs/rsp.bas: -------------------------------------------------------------------------------- 1 | 10 REM ROCK SCISSORS PAPER GAME FOR PDP11 2 | 20 PRINT "THE GAME OF ROCK, SCISSORS AND PAPER" 3 | 30 PRINT 4 | 40 G=0 5 | 50 REM GAME NUMBER ROUTINE 6 | 60 PRINT "HOW MANY GAMES WOULD YOU LIKE TO PLAY"; 7 | 70 INPUT Q 8 | 80 IF Q<1 GO TO 110 9 | 90 IF Q>10 GO TO 110 10 | 100 GO TO 160 11 | 110 PRINT 12 | 120 PRINT "SORRY, BUT I AM NOT ALLOWED TO PLAY THAT MANY" 13 | 130 PRINT "PLEASE ENTER A NEW NUMBER BETWEEN ONE AND TEN" 14 | 140 PRINT 15 | 150 GO TO 60 16 | 160 RANDOMIZE 17 | 170 G=G+1 18 | 180 PRINT 19 | 190 PRINT "THIS IS GAME NUMBER";G 20 | 200 PRINT 21 | 210 REM RANDOM NUMBER GENERATOR 22 | 220 X=INT(3*RND(0)+1) 23 | 230 REM PLAYERS INPUT AND VALID ENTRY ROUTINE 24 | 240 PRINT "3=ROCK, 2=SCISSORS AND 1=PAPER" 25 | 250 PRINT "WHATS YOUR CHOICE"; 26 | 260 INPUT K 27 | 270 IF K=1 GO TO 320 28 | 280 IF K=2 GO TO 320 29 | 290 IF K=3 GO TO 320 30 | 300 PRINT "INVALID ENTRY, TRY AGAIN" 31 | 310 GO TO 240 32 | 320 PRINT "MY CHOICE IS "; 33 | 330 REM MY CHOICE DISPLAY LOGIC 34 | 340 IF X=1 GO TO 370 35 | 350 IF X=2 GO TO 390 36 | 360 IF X=3 GO TO 410 37 | 370 PRINT "#1 PAPER" 38 | 380 GO TO 440 39 | 390 PRINT "#2 SCISSORS" 40 | 400 GO TO 440 41 | 410 PRINT "#3 ROCK" 42 | 420 GO TO 440 43 | 430 REM GAME LOGIC 44 | 440 IF X=K GO TO 590 45 | 450 IF X>K GO TO 560 46 | 460 IF X=1 GO TO 510 47 | 470 PRINT 48 | 480 PRINT "YOU WIN" 49 | 490 H=H+1 50 | 500 GO TO 620 51 | 510 IF K<>3 GO TO 480 52 | 520 PRINT 53 | 530 PRINT "I WIN" 54 | 540 C=C+1 55 | 550 GO TO 620 56 | 560 IF K<>1 GO TO 530 57 | 570 IF X<>3 GO TO 530 58 | 580 GO TO 480 59 | 590 PRINT 60 | 600 PRINT "TIE GAME, NO WINNER" 61 | 610 F=F+1 62 | 620 IF G.83333 THEN 170 14 | 140 IF N>5 THEN 210 15 | 150 PRINT "- CLICK -" 16 | 160 PRINT \ GO TO 80 17 | 170 PRINT CHR$(7);" BANG!!!!! YOU'RE DEAD!" 18 | 180 PRINT "CONDOLENCES WILL BE SENT TO YOUR RELATIVES." 19 | 190 PRINT \ PRINT \ PRINT "......NEXT VICTIM......" 20 | 200 GO TO 40 21 | 210 PRINT " YOU WIN!!!" 22 | 220 PRINT "LET SOMEONE ELSE BLOW HIS BRAINS OUT." 23 | 230 PRINT "WOULD YOU CARE TO TRY AGAIN? (1=YES, 0=NO)"; 24 | 240 INPUT K 25 | 250 IF K=1 THEN 60 26 | 260 END 27 | -------------------------------------------------------------------------------- /programs/sinetest.bas: -------------------------------------------------------------------------------- 1 | 10 DEF FNC$(X,Y)=CHR$(27)&"["&STR$(Y+1)&";"&STR$(X+1)&"H" 2 | 20 E$=CHR$(27) \ REM escape 3 | 30 H0$=E$+"[H" \ REM home cursor 4 | 40 E1$=E$+"[J" \ REM clear to end of screen 5 | 50 A=TTYSET(255,255) 6 | 60 PRINT H0$+E1$ \ REM clear screen 7 | 70 FOR Y=21 TO 1 STEP -1 8 | 80 PRINT FNC$(5,Y)+"|" 9 | 90 NEXT Y 10 | 100 PRINT FNC$(5,1)+"^" 11 | 110 PRINT FNC$(5,11)+"+"; 12 | 120 FOR X=6 TO 75 13 | 130 PRINT "-"; 14 | 140 NEXT X 15 | 150 PRINT ">" 16 | 160 PRINT FNC$(4,1)+"Y" 17 | 170 PRINT FNC$(75,12)+"X" 18 | 180 PRINT FNC$(3,11);"0" 19 | 190 FOR I=0 TO 68 20 | 200 X=I*PI/34 21 | 210 Y=SIN(X) 22 | 220 PRINT FNC$(INT(5+I),INT(11-9*Y+.5));"*" 23 | 230 NEXT I 24 | 240 A=TTYSET(255,73) 25 | 250 PRINT FNC$(0,21); 26 | 260 END 27 | -------------------------------------------------------------------------------- /programs/story.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT "MADLIB STORY-WRITER BY DAVE AHL BASED ON A PROGRAM" 2 | 15 PRINT "ORIGINALLY WRITTEN BY HENRY GALLO, JOHN GLENN HS."\PRINT 3 | 20 DIM A$(11),B$(5),C$(10)\RANDOMIZE 4 | 30 PRINT "O.K. WE'RE GOING TO WRITE SOME MAD-LIB STORIES" 5 | 40 PRINT "TOGETHER. YOU SUPPLY THE WORDS, I SUPPLY THE PLOT."\PRINT 6 | 60 PRINT "FIRST I NEED 11 ADJECTIVES. ADJECTIVES MODIFY" 7 | 70 PRINT "A NOUN, E.G., RED, DIRTY, LARGE, ETC." 8 | 80 FOR I=1 TO 11\INPUT A$(I)\NEXT I 9 | 90 PRINT \PRINT "NOW I NEED 5 ADVERBS. THEY MODIFY VERBS" 10 | 100 PRINT "AND END IN 'LY' (SLOWLY, GREEDILY, ETC.)" 11 | 110 FOR I=1 TO 5\INPUT B$(I)\NEXT I 12 | 120 PRINT \PRINT "O.K. NOW 10 NOUNS, E.G., TELETYPE, INSECT, COAT, ETC." 13 | 130 FOR I=1 TO 10\INPUT C$(I)\NEXT I 14 | 140 PRINT \PRINT "HOW ABOUT TWO FIRST NAMES OF MEN";\INPUT D$\INPUT E$ 15 | 160 PRINT "THE FIRST NAME OF A GIRL";\INPUT F$ 16 | 170 PRINT "AND SOMEONE'S LAST NAME";\INPUT G$ 17 | 180 PRINT "A GEOGRAPHICAL LOCATION";\INPUT H$ 18 | 190 PRINT "A LIQUID";\INPUT I$ 19 | 200 PRINT "AND FINALLY, AN EXCLAMATORY WORD OR TWO";\INPUT J$\PRINT 20 | 220 PRINT "VERY GOOD! WOULD YOU LIKE A NEWSPAPER AD (1)," 21 | 230 PRINT "A WESTERN (2), A STORY ABOUT THE ARMY (3), OR" 22 | 240 PRINT "A WATERBED (4). WHICH ONE, 1, 2, 3, OR 4";\INPUT N\PRINT 23 | 250 IF N>0 THEN IF N<5 THEN 270 24 | 260 PRINT "COME ON NOW -- 1, 2, 3, OR 4";\INPUT N\GOTO 250 25 | 270 FOR I=1 TO 6\PRINT\NEXT I\ON N GOTO 300,400,500,600 26 | 300 PRINT " DAILY GRUNT CLASSIFIEDS"\PRINT 27 | 310 PRINT "FOR SALE: 1957 SEDAN. THIS ";A$(1);" CAR IS IN A ";A$(2) 28 | 320 PRINT "CONDITION. IT WAS FORMERLY OWNED BY A ";A$(3);" SCHOOL TEACHER" 29 | 330 PRINT "WHO ALWAYS DROVE IT ";B$(1);". THERE IS A ";A$(4);" ";C$(1);" IN" 30 | 340 PRINT "THE BACK SEAT. IT HAS A CHROME ";C$(2);" ON THE HOOD, A ";A$(5) 31 | 350 PRINT "PAINT JOB, ";A$(6);" TIRES AND THE BACK OPENS INTO A ";A$(7) 32 | 360 PRINT C$(3);". WILL CONSIDER TAKING A SLIGHTLY USED ";C$(4);" IN TRADE" 33 | 370 PRINT \PRINT "LOST: IN THE VICINITY OF ";H$;", A ";A$(8);" FRENCH" 34 | 380 PRINT "POODLE WITH ";A$(9);" HAIR AND A ";A$(10);" TAIL. IT ANSWERS" 35 | 385 PRINT "TO THE NAME OF ";F$;". WHEN LAST SEEN IT WAS CARRYING A" 36 | 390 PRINT C$(5);" IN ITS MOUTH. A ";A$(11);" REWARD IS OFFERED."\GOTO 700 37 | 400 PRINT " AN ADULT WESTERN"\PRINT 38 | 410 PRINT "TEX ";G$;", THE MARSHALL OF ";D$;" CITY RODE INTO TOWN. HE" 39 | 420 PRINT "SAT ";B$(2);" IN THE SADDLE, READY FOR TROUBLE. HE KNEW THAT" 40 | 430 PRINT "HIS ";A$(1);" ENEMY, ";E$;" THE KID WAS IN TOWN. THE KID WAS" 41 | 440 PRINT "IN LOVE WITH TEX'S HORSE, ";F$;". SUDDENLY THE KID CAME OUT" 42 | 450 PRINT "OF THE ";A$(7);" NUGGET SALOON."\PRINT 43 | 460 PRINT "'DRAW TEX,' HE YELLED ";B$(3);"."\PRINT 44 | 470 PRINT "TEX REACHED FOR HIS ";C$(4);", BUT BEFORE HE COULD GET IT" 45 | 475 PRINT "OUT OF HIS ";C$(5);" THE KID FIRED, HITTING TEX IN THE ";C$(6) 46 | 480 PRINT "AND THE ";C$(7);"."\PRINT 47 | 485 PRINT "AS TEX FELL HE PULLED OUT HIS OWN ";C$(8);" AND SHOT THE KID" 48 | 490 PRINT INT(50*RND+3);"TIMES IN THE ";C$(9);". THE KID DROPPED IN A POOL" 49 | 492 PRINT "OF ";I$;"."\PRINT \PRINT "'";J$;",' TEX SAID, 'I HATED TO DO IT BUT" 50 | 495 PRINT "HE WAS ON THE WRONG SIDE OF THE ";C$(10);".'"\PRINT \GOTO 700 51 | 500 PRINT "IF YOU PLAN ON JOINING THE ARMY, HERE ARE SOME ";A$(11) 52 | 510 PRINT "HINTS THAT WILL HELP YOU BECOME A ";A$(10);" SOLDIER."\PRINT 53 | 520 PRINT "THE ARMY IS MADE UP OF OFFICERS, NON-COMS AND ";C$(1);"S." 54 | 530 PRINT "YOU CAN RECOGNIZE AN OFFICER BY THE ";C$(2);"S ON HIS" 55 | 540 PRINT "SHOULDERS AND THE FUNNY-LOOKING ";C$(3);"S ON HIS CAP." 56 | 550 PRINT "WHEN YOU ADDRESS AN OFFICER, ALWAYS SAY ";C$(4);" AND SAY IT" 57 | 555 PRINT B$(5);". IF YOU GET A ";A$(9);" HAIRCUT, KEEP YOUR ";C$(5);"S" 58 | 560 PRINT "SHINED, AND SEE THAT YOUR ";C$(6);" IS CLEAN AT ALL TIMES," 59 | 565 PRINT "YOU WILL BE A CREDIT TO THE SLOGAN:"\PRINT 60 | 570 PRINT " THE ARMY BUILDS BETTER ";C$(7);"S!"\PRINT 61 | 575 PRINT "AT ROLL CALL, WHEN THE ";A$(8);" SERGEANT CALLS YOUR NAME," 62 | 580 PRINT "SHOUT '";J$;"' LOUD AND CLEAR."\PRINT 63 | 585 PRINT "YOU WILL BECOME FAMILIAR WITH WEAPONS LIKE THE .30 CALIBRE" 64 | 590 PRINT C$(8);" AND THE AUTOMATIC ";C$(9);"."\PRINT 65 | 592 PRINT "FOLLOW THIS ADVICE AND YOU MAY WIN THE......" 66 | 595 PRINT "********** ";A$(7);" CONDUCT ";C$(10);" **********"\GOTO 700 67 | 600 PRINT "BUST-A-BUTTON AND DUCK DEPT. STORE"\PRINT "DIX HILLS, NEW YORK" 68 | 610 PRINT \PRINT "DEAR SIRS:"\PRINT 69 | 620 PRINT "LAST WEEK I PURCHASED A ";A$(2);" CONTOUR WATER BED IN YOUR" 70 | 630 PRINT "STORE. I GOT IT ESPECIALLY FOR MY ";A$(4);" HUSBAND WHO SLEEPS" 71 | 640 PRINT "VERY ";B$(1);" AND SAYS THAT ";A$(6);" WATER BEDS THAT HAVE" 72 | 650 PRINT C$(1);"S IN THEM MAKE HIS ";C$(3);" ACHE. WHEN THE BED" 73 | 655 PRINT "ARRIVED MY HUSBAND TESTED IT ";B$(2);" AND SAID THE ";A$(8) 74 | 660 PRINT C$(5);" WAS BENT AND KEPT PRESSING INTO HIS ";C$(6);". HE SAYS" 75 | 665 PRINT "THIS COULD LEAD TO A ";A$(10);" CONDITION OF THE ";C$(8);"."\PRINT 76 | 670 PRINT "I WOULD LIKE TO EXCHANGE THIS ";A$(9);" BED FOR ONE THAT" 77 | 675 PRINT "WILL ALLOW MY HUSBAND TO SLEEP ";B$(4);" AND WON'T MAKE" 78 | 680 PRINT "HIS ";C$(10);" SORE."\PRINT \PRINT TAB(30);"YOURS ";B$(5);"," 79 | 690 PRINT TAB(30);F$;" ";G$\PRINT 80 | 700 FOR I=1 TO 6\PRINT\NEXT I\PRINT "WANT ANOTHER STORY (YES OR NO)";\INPUT Y$ 81 | 710 IF Y$="NO" THEN 900 82 | 720 PRINT "WANT TO USE THE SAME WORDS (YES OR NO)";\INPUT Y$\PRINT 83 | 730 IF Y$="YES" THEN 220 84 | 731 IF Y$="NO" THEN 60 85 | 740 PRINT "COME ON NOW -- 'YES' OR 'NO'";\INPUT Y$\PRINT \GOTO 730 86 | 900 PRINT \PRINT "O.K. SEE YOU AGAIN SOMETIME!" 87 | 999 END 88 | -------------------------------------------------------------------------------- /programs/swami.bas: -------------------------------------------------------------------------------- 1 | 5 GO TO 400 2 | 10 PRINT \PRINT "WELCOME TO THE BOOTH OF THE SWAMI-ANSWERS FOR"; 3 | 12 PRINT " THE MASSES!!" 4 | 15 PRINT "TO WHOM AM I SPEAKING (KEEP IT SHORT PLEASE --" 5 | 20 PRINT "WHAT IS YOUR NAME";\INPUT A$ 6 | 32 PRINT 7 | 35 PRINT " HI THERE ";\GOSUB 500 8 | 36 PRINT ". ARE YOU ENJOYING YOURSELF HERE" 9 | 40 PRINT "IN CAPE COD"; 10 | 45 INPUT B$ 11 | 47 PRINT 12 | 50 IF B$="YES"GO TO 70 13 | 55 IF B$="NO"GO TO 80 14 | 60 PRINT " ";\GOSUB 500 \PRINT ", I DON'T UNDERSTAND YOUR ANSWER OF '"B$"'." 15 | 65 PRINT "PLEASE ANSWER 'YES' OR 'NO'. DO YOU LIKE IT HERE" 16 | 67 GO TO 40 17 | 70 PRINT "OH, I'M GLAD TO HEAR THAT ";\GOSUB 500 \PRINT 18 | 75 GO TO 100 19 | 80 PRINT "OH, SORRY TO HERE THAT ";\GOSUB 500 \PRINT ", MAYBE WE CAN BRIGHTEN" 20 | 85 PRINT "UP YOUR STAY A BIT" 21 | 100 PRINT 22 | 105 PRINT "SAY, ";\GOSUB 500 \PRINT ", I CAN SOLVE ALL KINDS OF PROBLEMS" 23 | 110 PRINT "EXCEPT THOSE DEALING WITH GREECE. WHAT KIND OF" 24 | 115 PRINT "PROBLEMS DO YOU HAVE (ANSWER SEX, HEALTH, MONEY," 25 | 120 PRINT "OR JOB)"; 26 | 125 INPUT C$ 27 | 127 PRINT 28 | 130 IF C$="SEX"GO TO 200 29 | 132 IF C$="JOB"GO TO 145 30 | 134 IF C$="MONEY"GO TO 160 31 | 135 IF C$="JOB"GO TO 145 32 | 136 IF C$="HEALTH"GO TO 180 33 | 138 PRINT "OH, ";\GOSUB 500 \PRINT ", YOUR ANSWER OF '"C$"' IS GREEK TO ME." 34 | 140 GO TO 250 35 | 145 PRINT "I CAN SYMPATHIZE WITH YOU ";\GOSUB 500 36 | 146 PRINT ". I HAVE TO WORK" 37 | 148 PRINT "VERY LONG HOURS FOR NO PAY -- AND SOME OF MY BOSSES REALLY" 38 | 150 PRINT "REALLY BEAT ON MY KEYBOARD, MY SUGGESTION TO YOU IS" 39 | 151 PRINT "TO GET INTO THE "; 40 | 153 PRINT "IN THE EDUCATION MARKET. IT'S GREAT FUN." 41 | 155 GO TO 250 42 | 160 PRINT "SORRY, ";\GOSUB 500 \PRINT ", I'M BROKE TOO. WHY DON'T YOU SELL" 43 | 163 PRINT "MORE COMPUTERS AND GET MORE COMMISSION? (HA, HA, HA)" 44 | 170 GO TO 250 45 | 180 PRINT "MY ADVICE TO YOU ";\GOSUB 500 \PRINT ", IS:" 46 | 185 PRINT " 1. TAKE TWO ASPRIN" 47 | 188 PRINT " 2. DRINK PLENTY OF FLUIDS (ORANGE JUICE, NOT BEER!)" 48 | 190 PRINT " 3. GO TO BED (ALONE)" 49 | 195 GO TO 250 50 | 200 PRINT "IS YOUR PROBLEM TOO MUCH OR TOO LITTLE"; 51 | 205 INPUT D$ 52 | 208 PRINT 53 | 210 IF D$="TOO MUCH"GO TO 220 54 | 213 IF D$="TOO LITTLE"GO TO 230 55 | 215 PRINT "DON'T GET SHOOK ";\GOSUB 500 \PRINT ", JUST ANSWER THE QUESTION" 56 | 217 PRINT "WITH 'TOO MUCH' OR 'TOO LITTLE'. WHICH IS IT"; 57 | 218 GO TO 205 58 | 220 PRINT "YOU CALL THAT A PROBLEM?!! I SHOULD HAVE SUCH PROBLEMS!" 59 | 225 PRINT "IF IT BOTHERS YOU, TAKE A COLD SHOWER ";\GOSUB 500 \PRINT "." 60 | 228 GO TO 250 61 | 230 PRINT "WHY ARE YOU HERE ";\GOSUB 500 \PRINT "? YOU SHOULD BE" 62 | 235 PRINT "IN TOKYO OR NEW YORK OR AMSTERDAM OR SOMEPLACE WITH SOME" 63 | 240 PRINT "REAL ACTION." 64 | 250 PRINT 65 | 255 PRINT "ANY MORE PROBLEMS YOU WANT SOLVED, ";\GOSUB 500 \PRINT ; 66 | 260 INPUT E$ 67 | 265 PRINT 68 | 270 IF E$="YES"GO TO 280 69 | 273 IF E$="NO"GO TO 300 70 | 275 PRINT "JUST A SIMPLE 'YES' OR 'NO' PLEASE, ";\GOSUB 500 \PRINT "." 71 | 278 GO TO 255 72 | 280 PRINT "WHAT KIND (SEX, MONEY, HEALTH, JOB)"; 73 | 285 GO TO 125 74 | 300 PRINT 75 | 302 PRINT "THAT WILL BE $5.00 FOR THE ADVICE, ";\GOSUB 500 \PRINT "." 76 | 305 PRINT "PLEASE LEAVE THE MONEY ON THE TERMINAL." 77 | 307 PRINT 78 | 308 PRINT 79 | 310 PRINT "DID YOU LEAVE THE MONEY"; 80 | 315 INPUT G$ 81 | 320 PRINT 82 | 325 IF G$="YES"GO TO 350 83 | 330 IF G$="NO"GO TO 370 84 | 335 PRINT "YOUR ANSWER OF '"G$"' CONFUSES ME, ";\GOSUB 500 \PRINT ". PLEASE" 85 | 340 PRINT "RESPOND WITH A 'YES' OR A 'NO'." 86 | 345 GO TO 310 87 | 350 PRINT "HEY, ";\GOSUB 500 \PRINT "??? YOU LEFT NO MONEY AT ALL!" 88 | 355 PRINT "YOU ARE CHEATING ME OUT OF MY HARD-EARNED LIVING." 89 | 360 PRINT "RIP OFF",;\GOSUB 500 \PRINT "*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*" 90 | 365 GO TO 390 91 | 370 PRINT "THAT'S HONEST, ";\GOSUB 500 \PRINT ", BUT HOW DO YOU EXPECT" 92 | 375 PRINT "ME TO GO ON WITH MY PSYCHOLOGY STUDIES IF MY PATIENTS DON'T" 93 | 380 PRINT "PAY THEIR BILLS?" 94 | 385 PRINT 95 | 390 REM 96 | 400 FOR N=1 TO 7 97 | 402 PRINT 98 | 405 NEXT N 99 | 410 GO TO 10 100 | 500 PRINT A$; 101 | 510 RETURN 102 | 999 END 103 | -------------------------------------------------------------------------------- /programs/synonym.bas: -------------------------------------------------------------------------------- 1 | 5 REMARKABLE PROGRAM CONVERTED TO BASIC-PLUS BY DAVE AHL, DIGITAL 2 | 10 DIM R$(5),W$(10),L(30),R(30) 3 | 20 R$(1)="RIGHT"\R$(2)="CORRECT"\R$(3)="FINE"\R$(4)="GOOD!"\R$(5)="CHECK" 4 | 70 RANDOMIZE\C=0\PRINT\PRINT "SYNONYM DRILL"\PRINT 5 | 90 PRINT "A SYNONYM OF A WORD MEANS ANOTHER WORD IN THE ENGLISH LANGUAGE" 6 | 100 PRINT "WHICH HAS THE SAME OR VERY NEARLY THE SAME MEANING."\PRINT 7 | 130 PRINT "I CHOOSE A WORD -- YOU TYPE A SYNONYM." 8 | 140 PRINT "IF YOU CAN'T THINK OF A SYNONYM, TYPE THE WORD 'HELP'" 9 | 145 PRINT "AND I WILL TELL YOU A SYNONYM."\PRINT 10 | 150 RESTORE\C=C+1\READ N 11 | 160 IF C>N THEN 420 12 | 170 N1=INT(RND*N+1) 13 | 174 IF R(N1)=1 THEN 170 14 | 176 R(N1)=1 15 | 180 FOR I=1 TO N1 16 | 190 READ N2 17 | 200 FOR J=1 TO N2 18 | 210 READ W$(J) 19 | 220 NEXT J 20 | 230 NEXT I 21 | 232 FOR J=1 TO N2\L(J)=J\NEXT J 22 | 235 L(0)=N2\G=1\PRINT 23 | 237 L(G)=L(L(0))\L(0)=N2-1\PRINT 24 | 240 PRINT " WHAT IS A SYNONYM OF "W$(G);\INPUT A$ 25 | 250 IF A$="HELP" THEN 340 26 | 260 FOR J=1 TO N2 27 | 270 IF G=J THEN 290 28 | 280 IF A$=W$(J) THEN 320 29 | 290 NEXT J 30 | 300 PRINT " TRY AGAIN."\GOTO 240 31 | 320 PRINT R$(RND*5+1)\GOTO 150 32 | 340 G1=INT(RND*L(0)+1) 33 | 360 PRINT "**** A SYNONYM OF "W$(G)" IS "W$(L(G1))"."\PRINT 34 | 370 L(G1)=L(L(0))\L(0)=L(0)-1\GOTO 240 35 | 420 PRINT\PRINT "SYNONYM DRILL COMPLETED."\GOTO 999 36 | 500 DATA 10 37 | 510 DATA 5,"FIRST","START","BEGINNING","ONSET","INITIAL" 38 | 520 DATA 5,"SIMILAR","ALIKE","SAME","LIKE","RESEMBLING" 39 | 530 DATA 5,"MODEL","PATTERN","PROTOTYPE","STANDARD","CRITERION" 40 | 540 DATA 5,"SMALL","INSIGNIFICANT","LITTLE","TINY","MINUTE" 41 | 550 DATA 6,"STOP","HALT","STAY","ARREST","CHECK","STANDSTILL" 42 | 560 DATA 6,"HOUSE","DWELLING","RESIDENCE","DOMICILE","LODGING","HABITATION" 43 | 570 DATA 7,"PIT","HOLE","HOLLOW","WELL","GULF","CHASM","ABYSS" 44 | 580 DATA 7,"PUSH","SHOVE","THRUST","PROD","POKE","BUTT","PRESS" 45 | 590 DATA 6,"RED","ROUGE","SCARLET","CRIMSON","FLAME","RUBY" 46 | 600 DATA 7,"PAIN","SUFFERING","HURT","MISERY","DISTRESS","ACHE","DISCOMFORT" 47 | 999 END 48 | -------------------------------------------------------------------------------- /programs/tictac.bas: -------------------------------------------------------------------------------- 1 | 1 DATA 2,3,4,9,1,5,8,7,6 2 | 2 DATA 2,3,4,9,1,5,8,7,6,2,9,8,3,1,7 3 | 3 DATA 4,5,6,2,1,6,4,1,8 4 | 4 DATA 0,1,-1,1,-1,1,-1,1,-1 5 | 5 DIM A(9) 6 | 6 DIM B(9) 7 | 7 DIM C(24) 8 | 8 DIM D(24) 9 | 9 DIM F(9) 10 | 10 FOR I=1 TO 9 11 | 11 READ A(I) 12 | 12 NEXT I 13 | 13 FOR I=1 TO 24 14 | 14 READ C(I) 15 | 15 NEXT I 16 | 16 FOR I=1 TO 9 17 | 17 READ F(I) 18 | 18 NEXT I 19 | 19 PRINT "TIC-TAC-TOE" 20 | 20 PRINT 21 | 21 PRINT "THE MOVE POSITIONS ARE:" 22 | 22 PRINT 23 | 23 PRINT "1 2 3" 24 | 24 PRINT "4 5 6" 25 | 25 PRINT "7 8 9" 26 | 26 GOSUB 133 27 | 27 GOSUB 133 28 | 32 LET E=0 29 | 33 LET G=2 30 | 34 LET K=0 31 | 35 FOR I=1 TO 9 32 | 36 LET B(I)=0 33 | 37 NEXT I 34 | 38 FOR I=1 TO 24 35 | 39 LET D(I)=0 36 | 40 NEXT I 37 | 41 PRINT 38 | 42 PRINT 39 | 43 PRINT "--BEGIN GAME--" 40 | 44 PRINT "YOU WILL BE 'X', I WILL BE 'O'" 41 | 47 PRINT "TYPE 0 IF YOU WANT ME TO GO FIRST"; 42 | 48 INPUT I 43 | 49 IF I=0 THEN 65 44 | 50 LET L=-1 45 | 51 PRINT "YOUR MOVE"; 46 | 52 INPUT I 47 | 53 PRINT 48 | 54 PRINT 49 | 55 LET H=INT(ABS(I)) 50 | 56 IF H<>I THEN 50 51 | 57 IF H < 1 THEN 50 52 | 58 IF H>9 THEN 50 53 | 59 LET H=A(H) 54 | 60 IF B(H) <> 0 THEN 50 55 | 61 IF K=1 THEN 64 56 | 62 LET G=F(H) 57 | 63 LET K=1 58 | 64 GOSUB 111 59 | 65 LET L=1 60 | 66 FOR I=1 TO 22 STEP 3 61 | 67 IF D(I) + D(I+1) + D(I+2) = -3 THEN 92 62 | 68 NEXT I 63 | 69 FOR I=1 TO 22 STEP 3 64 | 70 IF D(I) + D(I+1) + D(I+2) = 2 THEN 90 65 | 71 NEXT I 66 | 72 FOR I=1 TO 22 STEP 3 67 | 73 IF D(I) + D(I+1) + D(I+2) = -2 THEN 106 68 | 74 NEXT I 69 | 75 IF E=1 THEN 77 70 | 76 IF G = -1 THEN 78 71 | 77 IF B(1)=0 THEN 100 72 | 78 IF G <> 0 THEN 82 73 | 79 FOR I=2 TO 8 STEP 2 74 | 80 IF B(I)=0 THEN 101 75 | 81 NEXT I 76 | 82 IF H=8 THEN 86 77 | 83 FOR I=H+1 TO 8 78 | 84 IF B(I)=0 THEN 101 79 | 85 NEXT I 80 | 86 FOR I=2 TO 9 81 | 87 IF B(I)=0 THEN 101 82 | 88 NEXT I 83 | 89 GO TO 98 84 | 90 PRINT "I WIN" 85 | 91 GOTO 900 86 | 92 PRINT "YOU ARE NOT ALLOWED TO WIN" 87 | 93 FOR I=1 TO 9 88 | 94 LET B(I)=1 89 | 95 NEXT I 90 | 96 GOSUB 117 91 | 97 GOTO 900 92 | 98 PRINT "DRAW" 93 | 99 GOTO 900 94 | 100 LET I=1 95 | 101 LET H=I 96 | 102 GOSUB 111 97 | 103 LET E=1 98 | 104 GOSUB 117 99 | 105 GO TO 50 100 | 106 FOR J=I TO I+2 101 | 107 IF D(J)=0 THEN 109 102 | 108 NEXT J 103 | 109 LET I=C(J) 104 | 110 GO TO 101 105 | 111 LET B(H)=L 106 | 112 FOR M=1 TO 24 107 | 113 IF C(M) <> H THEN 115 108 | 114 LET D(M)=L 109 | 115 NEXT M 110 | 116 RETURN 111 | 117 FOR N=1 TO 9 112 | 118 IF B(N)=0 THEN 200 113 | 119 NEXT N 114 | 120 IF N<100 THEN 98 115 | 121 FOR N=1 TO 9 STEP 3 116 | 122 FOR O= 0 TO 2 117 | 123 IF B(A(O+N))=0 THEN 127 118 | 124 IF B(A(O+N))=1 THEN 129 119 | 125 PRINT "X "; 120 | 126 GO TO 130 121 | 127 PRINT "- "; 122 | 128 GO TO 130 123 | 129 PRINT "O "; 124 | 130 NEXT O 125 | 131 PRINT 126 | 132 NEXT N 127 | 133 PRINT 128 | 136 RETURN 129 | 137 STOP 130 | 200 LET N=1000 131 | 210 GOTO 119 132 | 900 GOTO 910 133 | 910 PRINT "TRY AGAIN (IF SO TYPE 0)"; 134 | 920 INPUT I 135 | 930 IF I<>0 THEN 999 136 | 940 GOTO 27 137 | 999 END 138 | -------------------------------------------------------------------------------- /programs/tower.bas: -------------------------------------------------------------------------------- 1 | 10 REM TOWERS 21-NOV-85 D.S.NUNN. 2 | 20 E$=CHR$(27) \ PRINT E$;"<";E$"(0";E$;")B";CHR$(15) 3 | 30 DIM A$(14),A(12),B(12),C(12) 4 | 40 PRINT E$;"[2J";E$;"[H" 5 | 50 PRINT E$;"[1;10H";E$;"#3TOWERS OF BABLE" 6 | 60 PRINT E$;"[2;10H";E$;"#4TOWERS OF BABLE" 7 | 70 GOSUB 1310 8 | 80 A$(1)="qqqqqqqqqqqqqqqqqqqqqqqq" 9 | 90 A$(2)=" qqqqqqqqqqqqqqqqqqqqqq " 10 | 100 A$(3)=" qqqqqqqqqqqqqqqqqqqq " 11 | 110 A$(4)=" qqqqqqqqqqqqqqqqqq " 12 | 120 A$(5)=" qqqqqqqqqqqqqqqq " 13 | 130 A$(6)=" qqqqqqqqqqqqqq " 14 | 140 A$(7)=" qqqqqqqqqqqq " 15 | 150 A$(8)=" qqqqqqqqqq " 16 | 160 A$(9)=" qqqqqqqq " 17 | 170 A$(10)=" qqqqqq " 18 | 180 A$(11)=" qqqq " 19 | 190 A$(12)=" qq " 20 | 200 A$(13)=" " 21 | 210 PRINT E$;"[5;5H";E$;"[0JHOW MANY LAYERS (3-12)"; 22 | 220 INPUT T 23 | 230 IF T>12 THEN 210 24 | 240 IF T<3 THEN 210 25 | 250 PRINT E$;"[2J" 26 | 260 FOR A=1 TO T 27 | 270 B$=STR$(20-A) 28 | 280 A(A)=A 29 | 290 PRINT E$;"[";B$;";1H";A$(A) 30 | 300 NEXT A 31 | 310 PRINT E$;"[21;5H";E$;"[0JMOVE"; 32 | 320 INPUT X$ 33 | 330 IF X$<"11" THEN 310 34 | 340 IF X$>"33" THEN 310 35 | 350 X=VAL(X$) 36 | 360 X1=INT(X/10) 37 | 370 X2=X-(X1*10) 38 | 380 IF X1>3 THEN 310 39 | 390 IF X1<1 THEN 310 40 | 400 IF X2>3 THEN 310 41 | 410 IF X2<1 THEN 310 42 | 420 ON X1 GOSUB 480,570,660 43 | 430 IF Z=1 THEN Z=0 \ GO TO 310 44 | 440 ON X2 GOSUB 750,850,950 45 | 450 M=M+1 \ PRINT E$;"[2;50HMOVES ";M 46 | 460 IF Z=2 THEN GO TO 1090 47 | 470 GO TO 310 48 | 480 FOR A=T TO 1 STEP -1 49 | 490 IF A(A)>0 THEN 520 50 | 500 NEXT A 51 | 510 PRINT CHR$(7); \ Z=1 \ RETURN 52 | 520 C=A(A) 53 | 530 B$=STR$(20-A) 54 | 540 PRINT E$;"[";B$;";1H";A$(13); 55 | 550 A(A)=0 56 | 560 RETURN 57 | 570 FOR A=T TO 1 STEP -1 58 | 580 IF B(A)>0 THEN 610 59 | 590 NEXT A 60 | 600 PRINT CHR$(7); \ Z=1 \ RETURN 61 | 610 C=B(A) 62 | 620 B$=STR$(20-A) 63 | 630 PRINT E$;"[";B$;";27H";A$(13); 64 | 640 B(A)=0 65 | 650 RETURN 66 | 660 FOR A=T TO 1 STEP -1 67 | 670 IF C(A)>0 THEN 700 68 | 680 NEXT A 69 | 690 PRINT CHR$(7); \ Z=1 \ RETURN 70 | 700 C=C(A) 71 | 710 B$=STR$(20-A) 72 | 720 PRINT E$;"[";B$;";54H";A$(13); 73 | 730 C(A)=0 74 | 740 RETURN 75 | 750 FOR B=1 TO T 76 | 760 IF A(B)=0 THEN 780 77 | 770 NEXT B 78 | 780 IF C>A(B-1) THEN 810 79 | 790 ON X1 GOSUB 750,850,950 80 | 800 RETURN 81 | 810 A(B)=C 82 | 820 B$=STR$(20-B) 83 | 830 PRINT E$;"[";B$;";1H";A$(C) 84 | 840 RETURN 85 | 850 FOR B=1 TO T 86 | 860 IF B(B)=0 THEN 880 87 | 870 NEXT B 88 | 880 IF C>B(B-1) THEN 910 89 | 890 ON X1 GOSUB 750,850,950 90 | 900 RETURN 91 | 910 B(B)=C 92 | 920 B$=STR$(20-B) 93 | 930 PRINT E$;"[";B$;";27H";A$(C) 94 | 940 RETURN 95 | 950 FOR B=1 TO T 96 | 960 IF C(B)=0 THEN 980 97 | 970 NEXT B 98 | 980 IF C>C(B-1) THEN 1010 99 | 990 ON X1 GOSUB 750,850,950 100 | 1000 RETURN 101 | 1010 C(B)=C 102 | 1020 B$=STR$(20-B) 103 | 1030 PRINT E$;"[";B$;";54H";A$(C) 104 | 1040 FOR F=1 TO T 105 | 1050 IF C(F)<>F THEN RETURN 106 | 1060 NEXT F 107 | 1070 Z=2 108 | 1080 RETURN 109 | 1090 FOR A=1 TO 5 \ PRINT CHR$(7); \ NEXT A 110 | 1100 PRINT E$;"[2J" 111 | 1110 PRINT E$;"[2;10H";E$;"#3CONGRATULATIONS" 112 | 1120 PRINT E$;"[3;10H";E$;"#4CONGRATULATIONS" 113 | 1130 PRINT E$;"[5;1HYOU MANAGED TO COMPLEATE THE TOWERS IN ONLY ";M;"MOVES" 114 | 1140 PRINT "THE BEST POSIBLE IS";2^T-1;"THIS PUTS YOU IN THE"; 115 | 1150 IF M-(2^T-1)=0 THEN PRINT " PERFECTIONEST CLASS" \ GO TO 1230 116 | 1160 IF M-(2^T-1)<5 THEN PRINT " EXPERT "; \ GO TO 1210 117 | 1170 IF M-(2^T-1)<20 THEN PRINT " AVERAGE "; \ GO TO 1210 118 | 1180 IF M-(2^T-1)<50 THEN PRINT " BEGINERS "; \ GO TO 1210 119 | 1190 IF M-(2^T-1)<100 THEN PRINT " DUMMIES "; \ GO TO 1210 120 | 1200 PRINT " NEAREST ASYLUM" \ GO TO 1220 121 | 1210 PRINT "CLASS" 122 | 1220 PRINT "YOU KNOW YOU COULD DO BETTER I RECOMEND THAT YOU TRY AGAIN" 123 | 1230 PRINT \ PRINT \ PRINT "WOULD YOU LIKE TO TRY AGAIN (Y\N) "; 124 | 1240 INPUT A$ 125 | 1250 IF A$="N" THEN 1520 126 | 1260 FOR A=1 TO 12 127 | 1270 A(A)=0 \ B(A)=0 \ C(A)=0 128 | 1280 NEXT A 129 | 1290 Z=0 \ M=0 130 | 1300 GO TO 40 131 | 1310 PRINT E$;"[5;5H WOULD YOU LIKE INSTRUCTIONS (Y/N) "; 132 | 1320 INPUT Q$ 133 | 1330 IF Q$="N" THEN RETURN 134 | 1340 PRINT E$;"[5;5H THE TOWERS OF BABLE ARE A SERIES OF DISKS DECREASING IN SIZE." 135 | 1350 PRINT " THE IDEA IS TO MOVE ALL OF THE DISKS FROM THE LEFT HAND SIDE" 136 | 1360 PRINT " TO THE RIGHT HAND SIDE. THERE ARE ONLY THREE PILES, AND YOU CAN" 137 | 1370 PRINT " NEVER PUT A LARGER DISK ON A SMALLER ONE." 138 | 1380 PRINT " I WILL KEEP TRACK OF HOW MANY MOVES IT TAKES YOU." 139 | 1390 PRINT 140 | 1400 PRINT " WHEN PROMPTED FOR THE 'MOVE' ENTER A TWO DIGIT NUMBER," 141 | 1410 PRINT " THE FIRST NUMBER IS THE IS WHERE YOU WANT THE DISK TO COME FROM," 142 | 1420 PRINT " AND THE SECOND IS WHERE IT WILL GO TO. I WILL NOT LET YOU PUT A" 143 | 1430 PRINT " LARGE DISK ON A SMALL ONE, I WILL JUST REPLACE IT WHERE IT CAME" 144 | 1440 PRINT " FROM. A MOVE OF '32' WILL PLACE THE TOP DISK FROM PILE THREE" 145 | 1450 PRINT " TO THE TOP DISK ON PILE TWO. WELL HAVE FUN AND DONT PULL ALL" 146 | 1460 PRINT " YOUR HAIR OUT." 147 | 1470 PRINT 148 | 1480 PRINT " I RECOMEND THAT BEGINERS TRY THREE TO FIVE DISKS TO START" 149 | 1490 PRINT " PUSH ENTER TO START"; 150 | 1500 INPUT Q$ 151 | 1510 RETURN 152 | 1520 PRINT CHR$(14); 153 | 1530 END 154 | -------------------------------------------------------------------------------- /programs/trade.bas: -------------------------------------------------------------------------------- 1 | 10 REM *** CONVERTED TO RSTS/E BY DAVID AHL, DIGITAL 2 | 20 DIM F(4) 3 | 30 RANDOMIZE 4 | 40 GOSUB 370 5 | 50 LET I=600 6 | 60 PRINT "DO YOU WISH TO TRADE FURS?" 7 | 70 GOSUB 1510 8 | 80 IF B$="YES" THEN 110 9 | 90 IF B$="NO" THEN 1700 10 | 100 GOSUB 1510 11 | 110 PRINT 12 | 120 PRINT "YOU HAVE $";I;"SAVINGS." 13 | 130 PRINT "AND 190 FURS TO BEGIN THE EXPEDITION." 14 | 140 PRINT 15 | 150 PRINT "YOUR 190 FURS ARE DISTRIBUTED AMONG THE FOLLOWING" 16 | 160 PRINT "KINDS OF PELTS: MINK, BEAVER, ERMINE AND FOX." 17 | 170 GOSUB 1650 18 | 180 RESTORE 19 | 190 FOR J=1 TO 4 20 | 200 READ B$ 21 | 210 PRINT 22 | 220 PRINT "HOW MANY ";B$;" PELTS DO YOU HAVE"; 23 | 230 INPUT F(J) 24 | 240 LET F(0)=F(1)+F(2)+F(3)+F(4) 25 | 250 IF F(0)=190 THEN 440 26 | 260 IF F(0)>190 THEN 290 27 | 270 NEXT J 28 | 280 GO TO 440 29 | 290 PRINT 30 | 300 PRINT "YOU MAY NOT HAVE THAT MANY FURS." 31 | 310 PRINT "DO NOT TRY TO CHEAT. I CAN ADD." 32 | 320 PRINT "YOU MUST START AGAIN." 33 | 330 GO TO 40 34 | 340 PRINT 35 | 350 PRINT "DO YOU WANT TO TRADE FURS NEXT YEAR?" 36 | 360 GO TO 70 37 | 370 PRINT "YOU ARE THE LEADER OF A FRENCH FUR TRADING EXPEDITION IN " 38 | 380 PRINT "1776 LEAVING THE LAKE ONTARIO AREA TO SELL FURS AND GET" 39 | 390 PRINT "SUPPLIES FOR THE NEXT YEAR. YOU HAVE A CHOICE OF THREE" 40 | 400 PRINT "FORTS AT WHICH YOU MAY TRADE. THE COST OF SUPPLIES" 41 | 410 PRINT "AND THE AMOUNT YOU RECEIVE FOR YOUR FURS WILL DEPEND" 42 | 420 PRINT "ON THE FORT THAT YOU CHOOSE." 43 | 430 RETURN 44 | 440 PRINT "DO YOU WANT TO TRADE YOUR FURS AT FORT 1, FORT 2," 45 | 450 PRINT "OR FORT 3? FORT 1 IS FORT HOCHELAGA (MONTREAL)" 46 | 460 PRINT "AND IS UNDER THE PROTECTION OF THE FRENCH ARMY." 47 | 470 PRINT "FORT 2 IS FORT STADACONA (QUEBEC) AND IS UNDER THE" 48 | 480 PRINT "PROTECTION OF THE FRENCH ARMY. HOWEVER, YOU MUST" 49 | 490 PRINT "MAKE A PORTAGE AND CROSS THE LACHINE RAPIDS." 50 | 500 PRINT "FORT 3 IS FORT NEW YORK AND IS UNDER DUTCH CONTROL." 51 | 510 PRINT "YOU MUST CROSS THROUGH IROQUOIS LAND." 52 | 520 PRINT "ANSWER 1, 2, OR 3." 53 | 530 INPUT B 54 | 540 IF B=1 THEN 580 55 | 550 IF B=2 THEN 650 56 | 560 IF B=3 THEN 720 57 | 570 GO TO 520 58 | 580 PRINT "YOU HAVE CHOSEN THE EASIEST ROUTE. HOWEVER, THE FORT" 59 | 590 PRINT "IS FAR FROM ANY SEAPORT. THE VALUE" 60 | 600 PRINT "YOU RECEIVE FOR YOUR FURS WILL BE LOW AND THE COST" 61 | 610 PRINT "OF SUPPLIES HIGHER THAN AT FORTS STADACONA OR NEW YORK." 62 | 620 GOSUB 1500 63 | 630 IF B$="YES" THEN 520 64 | 640 GO TO 790 65 | 650 PRINT "YOU HAVE CHOSEN A HARD ROUTE. IT IS, IN COMPARSION," 66 | 660 PRINT "HARDER THAN THE ROUTE TO HOCHELAGA BUT EASIER THAN" 67 | 670 PRINT "THE ROUTE TO NEW YORK. YOU WILL RECEIVE AN AVERAGE VALUE" 68 | 680 PRINT "FOR YOUR FURS AND THE COST OF YOUR SUPPLIES WILL BE AVERAGE" 69 | 690 GOSUB 1500 70 | 700 IF B$="YES" THEN 520 71 | 710 GO TO 880 72 | 720 PRINT "YOU HAVE CHOSEN THE MOST DIFFICULT ROUTE. AT" 73 | 730 PRINT "FORT NEW YORK YOU WILL RECEIVE THE HIGHEST VALUE" 74 | 740 PRINT "FOR YOUR FURS. THE COST OF YOUR SUPPLIES" 75 | 750 PRINT "WILL BE LOWER THAN AT ALL THE OTHER FORTS." 76 | 760 GOSUB 1500 77 | 770 IF B$="YES" THEN 520 78 | 780 GO TO 1190 79 | 790 LET I=I-160 80 | 800 PRINT 81 | 810 LET M1=INT((.2*RND+.7)*100+.5)/100 82 | 820 LET E1=INT((.2*RND+.65)*10^2+.5)/10^2 83 | 830 LET B1=INT((.2*RND+.75)*10^2+.5)/10^2 84 | 840 LET D1=INT((.2*RND+.8)*10^2+.5)/10^2 85 | 850 PRINT "SUPPLIES AT FORT HOCHELAGA COST $150.00" 86 | 860 PRINT "YOUR TRAVEL EXPENSES TO HOCHELAGA WERE $10.00" 87 | 870 GO TO 1560 88 | 880 LET I=I-140 89 | 890 PRINT 90 | 900 LET M1=INT((.3*RND+.85)*10^2+.5)/10^2 91 | 910 LET E1=INT((.15*RND+.8)*10^2+.5)/10^2 92 | 920 LET B1=INT((.2*RND+.9)*10^2+.5)/10^2 93 | 930 LET P=INT(10*RND)+1 94 | 940 IF P<=2 THEN 980 95 | 950 IF P<=6 THEN 1040 96 | 960 IF P<=8 THEN 1060 97 | 970 IF P<=10 THEN 1110 98 | 980 LET F(2)=0 99 | 990 PRINT "YOUR BEAVER WERE TOO HEAVY TO CARRY ACROSS" 100 | 1000 PRINT "THE PORTAGE. YOU HAD TO LEAVE THE PELTS BUT FOUND" 101 | 1010 PRINT "THEM STOLEN WHEN YOU RETURNED" 102 | 1020 GOSUB 1160 103 | 1030 GO TO 1580 104 | 1040 PRINT "YOU ARRIVED SAFELY AT FORT STADACONA" 105 | 1050 GO TO 1140 106 | 1060 GOSUB 1650 107 | 1070 PRINT "YOUR CANOE UPSET IN THE LACHINE RAPIDS. YOU" 108 | 1080 PRINT "LOST ALL YOUR FURS" 109 | 1090 GOSUB 1160 110 | 1100 GO TO 1610 111 | 1110 LET F(4)=0 112 | 1120 PRINT "YOUR FOX PELTS WERE NOT CURED PROPERLY." 113 | 1130 PRINT "NO ONE WILL BUY THEM." 114 | 1140 GOSUB 1160 115 | 1150 GO TO 1560 116 | 1160 PRINT "SUPPLIES AT FORT STADACONA COST $125.00" 117 | 1170 PRINT "YOUR TRAVEL EXPENSES TO STADACONA WERE $15.00" 118 | 1180 RETURN 119 | 1190 LET I=I-105 120 | 1200 PRINT 121 | 1210 LET M1=INT((.15*RND+1.05)*10^2+.5)/10^2 122 | 1220 LET E1=INT((.15*RND+.95)*10^2+.5)/10^2 123 | 1230 LET B1=INT((.25*RND+1)*10^2+.5)/10^2 124 | 1240 LET D1=INT((.25*RND+1.1)*10^2+.5)/10^2 125 | 1250 LET P=INT(10*RND)+1 126 | 1260 IF P<=2 THEN 1300 127 | 1270 IF P<=6 THEN 1340 128 | 1280 IF P<=8 THEN 1370 129 | 1290 IF P<=10 THEN 1420 130 | 1300 PRINT "YOU WERE ATTACKED BY A PARTY OF IROQUOIS." 131 | 1310 PRINT "ALL PEOPLE IN YOUR TRADING GROUP WERE" 132 | 1320 PRINT "KILLED. THIS ENDS THE GAME." 133 | 1330 STOP 134 | 1340 PRINT "YOU WERE LUCKY. YOU ARRIVED SAFELY" 135 | 1350 PRINT "AT FORT NEW YORK." 136 | 1360 GO TO 1460 137 | 1370 GOSUB 1650 138 | 1380 PRINT "YOU NARROWLY ESCAPED AN IROQUOIS RAIDING PARTY." 139 | 1390 PRINT "HOWEVER, YOU HAD TO LEAVE ALL YOUR FURS BEHIND." 140 | 1400 GOSUB 1480 141 | 1410 GO TO 1610 142 | 1420 LET B1=B1/2 143 | 1430 LET M1=M1/2 144 | 1440 PRINT "YOUR MINK AND BEAVER WERE DAMAGED ON YOUR TRIP." 145 | 1450 PRINT "YOU RECEIVE ONLY HALF THE CURRENT PRICE FOR THESE FURS." 146 | 1460 GOSUB 1480 147 | 1470 GO TO 1560 148 | 1480 PRINT "SUPPLIES AT NEW YORK COST $80.00" 149 | 1490 RETURN 150 | 1500 PRINT "DO YOU WANT TO TRADE AT ANOTHER FORT?" 151 | 1510 PRINT "ANSWER YES OR NO", 152 | 1520 A=SYS(7,1) \ REM FORCE UPPERCASE 153 | 1530 INPUT B$ 154 | 1540 A=SYS(7,0) 155 | 1550 RETURN 156 | 1560 PRINT 157 | 1570 PRINT "YOUR BEAVER SOLD FOR $";B1*F(2); 158 | 1580 PRINT "YOUR FOX SOLD FOR $";D1*F(4) 159 | 1590 PRINT "YOUR ERMINE SOLD FOR $";E1*F(3); 160 | 1600 PRINT "YOUR MINK SOLD FOR $";M1*F(1) 161 | 1610 LET I=M1*F(1)+B1*F(2)+E1*F(3)+D1*F(4)+I 162 | 1620 PRINT 163 | 1630 PRINT "YOU NOW HAVE $";I;" INCLUDING YOUR PREVIOUS SAVINGS" 164 | 1640 GO TO 340 165 | 1650 FOR J=1 TO 4 166 | 1660 LET F(J)=0 167 | 1670 NEXT J 168 | 1680 RETURN 169 | 1690 DATA "MINK","BEAVER","ERMINE","FOX" 170 | 1700 END 171 | -------------------------------------------------------------------------------- /programs/trek.doc: -------------------------------------------------------------------------------- 1 | 2 | To: Players 3 | From: Game Maintenance 4 | Date: 4-JAN-79 5 | 6 | SUBJ: TREK, Startrek Game for the VT52/VT100 7 | 8 | TREK is a variant of SPCWAR (or STRTRK) which uses the cursor features 9 | of the VT52 and VT100 to produce better displays. 10 | 11 | This version of TREK is based on numerous previous versions, starting 12 | with a baselevel written by Aron Insinga. The modifications for the 13 | VT52/VT100 were made by J. Thompson. The master game was added by 14 | R. Supnik. 15 | 16 | I. Introduction 17 | 18 | As captain of the Federation starship ENTERPRISE, your mission is to 19 | destroy all the Klingon battle cruisers in the galaxy, using as few 20 | moves (stardates) as possible. To this end, the ENTERPRISE is armed 21 | with photon torpedos, as well as the famous phasers. You can search 22 | for the Klingons using your long range sensors as you move through the 23 | galaxy. You are also provided with at least one starbase where you 24 | may replenish your supply of torpedos and energy. 25 | 26 | II. Display 27 | 28 | The left hand display is the galaxy, which is divided into 64 quadrants, 29 | each of which is further divided into 64 sectors. The quadrant with an 30 | E indicates the location of the ENTERPRISE. All other quadrants are 31 | initially unknown. Through the use of the long range sensors, the 32 | number and types of all objects in the galaxy can be discovered. When 33 | a quadrant has been scanned, its contents are indicated with a three 34 | digit number. The left hand digit represents the number of Klingon 35 | battle cruisers, the middle digit the number of starbases, the right 36 | hand digit the number of stars. For example, 319 indicates 3 Klingon 37 | battle cruisers, 1 starbase, and 9 stars. 38 | 39 | The right hand display is a close up of the quadrant in which the 40 | ENTERPRISE is currently located. E represents the ENTERPRISE, K 41 | represents a Klingon battle cruiser, and * represents a star. Just 42 | below the quadrant display is a display of important status variables, 43 | such as the current location of the ENTERPRISE and the amount of energy 44 | remaining. Also displayed is the current alert condition: 45 | 46 | RED Klingons in this quadrant 47 | ORANGE Klingons in adjacent quadrant(s) 48 | YELLOW Energy dangerously low 49 | GREEN No threats 50 | DOCKED Docked at STARBASE 51 | 52 | III. Commands 53 | 54 | TREK recognizes nine commands: 55 | 56 | W- Warp drive (maneuver the ENTERPRISE) 57 | L- Long range scan 58 | S- Short range scan 59 | P- Phaser fire control 60 | T- Torpedo fire control 61 | C- Chart (rewrite) the entire screen 62 | D- Damage control report 63 | B- Battle analysis report 64 | E- Early exit from game 65 | 66 | W- TREK asks for the course and warp factor. The course is a real 67 | number in the range 1 - 8.9999 and indicates the direction to 68 | travel, as marked on the compass in the middle of the screen. 69 | The warp factor is a real number in the range 1 - 12 and is 70 | the number of quadrants to be travelled. 71 | 72 | L- TREK scans the eight quadrants immediately adjacent to the 73 | ENTERPRISE and updates the galaxy display accordingly. 74 | 75 | S- TREK scans the quadrant in which the ENTERPRISE currently resides 76 | and updates the quadrant display accordingly. 77 | 78 | P- Any portion of the ENTERPRISE's energy can be used to power the 79 | phasers. The onboard computer divides this energy among the 80 | Klingon cruisers in the quadrant and determines the various 81 | directions of fire. The effectiveness of phaser fire depends 82 | primarily on the distance to the target. The amount of energy 83 | fired is deducted from the ENTERPRISE's energy pool. 84 | 85 | T- Initially the ENTERPRISE has ten photon torpedos. One torpedo 86 | destroys anything it hits, including Klingon battle cruisers, 87 | stars, and starbases. The course of a torpedo is set the same 88 | way as for the ENTERPRISE. 89 | 90 | C- TREK rewrites the entire display screen. 91 | 92 | D- TREK outputs a report on the state of the major ENTERPRISE 93 | subsystems (see Master Game, below). 94 | 95 | B- TREK analyses the location and strength of all Klingon battle 96 | cruisers in the quadrant. 97 | 98 | E- TREK terminates the current game after printing a suitably snide 99 | remark. 100 | 101 | IV. Klingons 102 | 103 | A Klingon battle cruiser starts with an energy allocation of 200 - 300 units. 104 | It fires with all its force whenever attacked or whenever the ENTERPRISE 105 | enters or leaves its quadrant. Phaser firing does not deplete a 106 | Klingon's energy pool; however, a hit from the ENTERPRISE's phasers does. 107 | When a Klingon's energy pool drops to zero or below, it is eliminated. 108 | 109 | You win the game by eliminating all Klingon battle cruisers in the galaxy 110 | within forty turns. If you fail to eliminate all enemy cruisers, or if 111 | at any time your own energy pool drops to zero or below, you lose. 112 | 113 | V. Master Game 114 | 115 | As an option, at startup you may ask for the master game. This differs 116 | from the regular game in the following ways: 117 | 118 | - The game length is 30 - 50 turns long (instead of 40). 119 | 120 | - A Klingon battle cruiser starts with an initial energy allocation 121 | of 1000 - 1500 units. However, it only fires 20% - 50% of its 122 | total allocation in any one turn, and the amount fired is 123 | deducted from its energy pool. 124 | 125 | - On any movement turn, there is a 20% chance that some major 126 | subsystem of the ENTERPRISE will be damaged by a space storm. 127 | Damage may make the subsystem partially or totally nonfunctional. 128 | Damage is repaired gradually over the course of each subsequent 129 | movement turn or by docking with a starbase. 130 | 131 | VI. Sleeping 132 | 133 | The amount of time delay following a printout is controlled by the delay 134 | loop in statement 9030. The time constant 4000 is approximately right 135 | for an 11/45. You should adjust it upward or downward as necessary for 136 | your processor. 137 | 138 | -------------------------------------------------------------------------------- /programs/tvshow.bas: -------------------------------------------------------------------------------- 1 | 10 REM *** ORIGINALLY WRITTEN IN FOCAL BY MARY COLE 2 | 20 REM *** CONVERTED TO BASIC-PLUS BY DAVE AHL 3 | 30 RANDOMIZE 4 | 50 PRINT "THIS PROGRAM AUTOMATICALLY COMES UP WITH TELEVISION" 5 | 60 PRINT "SHOWS GUARANTEED TO APPEAL TO THE MASSES AND WIN" 6 | 70 PRINT "HIGH NEILSEN RATINGS."\PRINT 7 | 80 PRINT "HERE IS THE FIRST PLOT:" 8 | 100 PRINT\GOSUB 800 9 | 110 ON X GOTO 120,130,140,150,160,120,130,140,150,160 10 | 120 A$="PROGRAM"\GOTO 170 11 | 130 A$="REPORT"\GOTO 170 12 | 140 A$="SPECIAL"\GOTO 170 13 | 150 A$="SERIES"\GOTO 170 14 | 160 A$="STORY" 15 | 170 GOSUB 800 16 | 180 ON X GOTO 190,200,210,220,230,240,250,260,270,280 17 | 190 B$="SWINGING "\GOTO 290 18 | 200 B$="BRILLIANT "\GOTO 290 19 | 210 B$="SALTY "\GOTO 290 20 | 220 B$="HILARIOUS "\GOTO 290 21 | 230 B$="SENSITIVE "\GOTO 290 22 | 240 B$="DODDERING "\GOTO 290 23 | 250 B$="HENPECKED "\GOTO 290 24 | 260 B$="DEDICATED "\GOTO 290 25 | 270 B$="THOUGHTFUL "\GOTO 290 26 | 280 B$="HEAVY " 27 | 290 GOSUB 800 28 | 300 ON X GOTO 310,320,330,340,350,360,370,380,390,400 29 | 310 C$="GIRL COWHAND"\GOTO 410 30 | 320 C$="LITTLE BOY"\GOTO 410 31 | 330 C$="SCIENTIST"\GOTO 410 32 | 340 C$="LAWYER"\GOTO 410 33 | 350 C$="TOWN MARSHAL"\GOTO 410 34 | 360 C$="DENTIST"\GOTO 410 35 | 370 C$="BUS DRIVER"\GOTO 410 36 | 380 C$="JUNGLE MAN"\GOTO 410 37 | 390 C$="SECRET AGENT"\GOTO 410 38 | 400 C$="COLLIE" 39 | 410 GOSUB 800 40 | 420 ON X GOTO 430,440,450,460,470,430,440,450,460,470 41 | 430 D$="A WHIZ"\GOTO 480 42 | 440 D$="A FLOP"\GOTO 480 43 | 450 D$="MEDIOCRE"\GOTO 480 44 | 460 D$="A SUCCESS"\GOTO 480 45 | 470 D$="A DISASTER" 46 | 480 GOSUB 800 47 | 490 ON X GOTO 500,510,520,530,540,550,560,570,580,590 48 | 500 E$="SOLVING CRIMES"\GOTO 600 49 | 510 E$="ROPING COWS"\GOTO 600 50 | 520 E$="COOKING HEALTH FOOD"\GOTO 600 51 | 530 E$="PITCHING WOO"\GOTO 600 52 | 540 E$="PROTECTING ECOLOGY"\GOTO 600 53 | 550 E$="HELPING CHILDREN"\GOTO 600 54 | 560 E$="TWO-FISTED DRINKING"\GOTO 600 55 | 570 E$="FIGHTING FIRES"\GOTO 600 56 | 580 E$="HERDING ELEPHANTS"\GOTO 600 57 | 590 E$="WINNING RACES" 58 | 600 GOSUB 800 59 | 610 ON X GOTO 620,630,640,650,660,670,680,690,700,710 60 | 620 F$="RECOVERS THE JEWELS"\GOTO 720 61 | 630 F$="FOILS THE SPIES"\GOTO 720 62 | 640 F$="DESTROYS THE CITY"\GOTO 720 63 | 650 F$="FINDS LOVE"\GOTO 720 64 | 660 F$="SAVES THE ANIMALS"\GOTO 720 65 | 670 F$="CONFESSES"\GOTO 720 66 | 680 F$="DISCOVERS THE SECRET"\GOTO 720 67 | 690 F$="STOPS THE FLOOD"\GOTO 720 68 | 700 F$="HELPS THE DOG"\GOTO 720 69 | 710 F$="MAKES THE SACRIFICE" 70 | 720 PRINT "THE "A$" IS ABOUT A "B$;C$" WHO IS "D$" AT" 71 | 730 PRINT E$" AND WHO "F$"."\PRINT\PRINT 72 | 740 PRINT "ANOTHER (YES OR NO)";\INPUT A$ 73 | 750 IF A$="YES" THEN 100 74 | 751 GOTO 999 75 | 800 X=INT(10*RND+1)\RETURN 76 | 999 PRINT\PRINT "O.K. HOPE YOU HAVE A SUCCESSFUL TV SHOW!!"\END 77 | -------------------------------------------------------------------------------- /programs/vreg1.rlc: -------------------------------------------------------------------------------- 1 | N=5 2 | R1 1 4 1800 3 | R2 1 2 3300 4 | IA1 2 3 3 4 .18315 5 | IA2 1 2 2 5 5.6285 6 | R1' 3 4 5.2 7 | R2' 4 0 56 8 | R3' 2 5 .1733 9 | R3 5 3 3600 10 | R4 3 0 4700 11 | R4' 5 0 60 12 | K 1 0 1 1 0 5 0 13 | -------------------------------------------------------------------------------- /programs/vreg2.rlc: -------------------------------------------------------------------------------- 1 | N=5 2 | R1 1 4 1800 3 | R2 1 2 3300 4 | IA1 2 3 3 4 .18315 5 | IA2 1 2 2 5 5.6285 6 | R1' 3 4 5.2 7 | R2' 4 0 56 8 | R3' 2 5 .1733 9 | R3 5 3 3600 10 | R4 3 0 4700 11 | R4' 5 0 60 12 | Z 1 0 1 5 0 13 | -------------------------------------------------------------------------------- /programs/vreg3.rlc: -------------------------------------------------------------------------------- 1 | N=5 2 | R1 1 4 1800 3 | R2 1 2 3300 4 | IA1 2 3 3 4 .18315 5 | IA2 1 2 2 5 5.6285 6 | R1' 3 4 5.2 7 | R2' 4 0 56 8 | R3' 2 5 .1733 9 | R3 5 3 3600 10 | R4 3 0 4700 11 | R4' 5 0 60 12 | RD 1 0 1 13 | Z 1 0 1 5 0 14 | -------------------------------------------------------------------------------- /programs/war.bas: -------------------------------------------------------------------------------- 1 | 5 REM 'WAR 3'. ORIGINAL 8K MODV FOCAL BY MIKE FURMAN 2 | 10 REM TSS/8 BASIC IV VERSION BY M E LYON JR 1972 3 | 15 DIM V(3),X(3),P(3),R(3,3) 4 | 20 DATA 1,2,2,3,3,1,1,3,3,2,2,1,2,3,3,1,1,2,0 5 | 25 PRINT "THIS IS THE BASIC VERSION OF 'WAR3'. TWO OR THREE MAY PLAY." 6 | 30 PRINT "DO YOU NEED INSTRUCTIONS";\INPUT A$\IF A$="YES" THEN 265 7 | 35 PRINT \PRINT \PRINT "NO. OF PLAYERS";\INPUT N 8 | 40 IF N=2 THEN 50\IF N=3 THEN 55 9 | 45 PRINT "ERROR--TWO OR THREE PLAYERS."\PRINT \GOTO 35 10 | 50 N1=1\PRINT \PRINT \GOTO 60 11 | 55 N1=N\PRINT \PRINT 12 | 60 FOR J=1 TO N1\READ A,B\PRINT "DISTANCE (FT.) ";A;" TO ";B;\INPUT R(A,B) 13 | 65 R(B,A)=R(A,B)\NEXT J\PRINT \PRINT 14 | 70 RESTORE \IF N=2 THEN 95 15 | 75 FOR J=1 TO N\READ A,B,C,D,E,F 16 | 80 IF R(A,B)R(A,B) THEN 130 24 | 120 PRINT "ERROR--";A;" CANNOT REACH ";B 25 | 125 PRINT "WHAT IS THE MUZZLE VELOCITY OF ";A;\INPUT V(A)\GOTO 105 26 | 130 NEXT B\NEXT A\N1=N\PRINT \PRINT \PRINT \PRINT \PRINT 27 | 135 PRINT \PRINT \PRINT "ROUND ";T+1\PRINT \FOR M=1 TO N\IF P(M)=12 THEN 260 28 | 140 IF N=3 THEN 150\C=1\IF M<>1 THEN 145\C=2 29 | 145 PRINT "PLAYER ";M;" SHOOTING AT ";C\GOTO 175 30 | 150 PRINT "PLAYER ";M;" SHOOTING AT";\INPUT C 31 | 155 IF C=1 THEN 165\IF C=2 THEN 165\IF C=3 THEN 165 32 | 160 PRINT "ERROR--PLAYERS DESIGNATED 1, 2, 3."\GOTO 150 33 | 165 IF C<>M THEN 170\PRINT "ERROR--CANNOT SHOOT SELF."\GOTO 150 34 | 170 IF P(C)<>12 THEN 175\PRINT "ERROR-- ";C;" IS DEFUNCT"\GOTO 150 35 | 175 PRINT "FIRING ANGLE";\INPUT A3 36 | 180 IF A3<0 THEN 185\IF A3>180 THEN 185\GOTO 190 37 | 185 PRINT "ERROR--FIRED INTO GROUND. ";M;" NOW DEFUNCT."\P(M)=12\GOTO 240 38 | 190 IF A3<90 THEN 195\PRINT "ERROR--FIRED WRONG WAY, LOSE SHOT."\GOTO 260 39 | 195 Z=SIN(A3*.0349064)*V(M)^2/32 40 | 200 X=(R(M,C)/1000*RND(X))-(R(M,C)/1000*RND(X)) 41 | 205 D=X+Z\D1=R(M,C)*.05 42 | 210 IF DR(M,C) THEN 235 44 | 220 PRINT " TOO CLOSE - ";M;" IS DEFUNCT."\P(M)=12\GOTO 240 45 | 225 PRINT " A HIT - ";C;" IS DEFUNCT."\P(C)=12\GOTO 240 46 | 230 PRINT " YOU UNDERSHOT BY ";ABS(D-R(M,C));" FEET."\GOTO 260 47 | 235 PRINT " YOU OVERSHOT BY ";ABS(D-R(M,C));" FEET."\GOTO 260 48 | 240 N1=N1-1\IF N1>1 THEN 260 49 | 245 FOR M1=1 TO N\IF P(M1)=12 THEN 255 50 | 250 PRINT \PRINT "GAME OVER. ";M1;" WINS."\STOP 51 | 255 NEXT M1\STOP 52 | 260 PRINT \PRINT \NEXT M\T=T+1\GOTO 135 53 | 265 PRINT \PRINT "THIS IS A WAR GAME. TWO OR THREE PLAYERS ARE GIVEN" 54 | 270 PRINT "(THEORETICAL) CANNONS WITH WHICH THEY ATTEMPT TO SHOOT EACH" 55 | 275 PRINT "OTHER. THE PARAMETERS FOR DISTANCES AND MUZZLE VELOCITIES ARE " 56 | 280 PRINT "SET AT THE BEGINING OF THE GAME. THE SHOTS ARE FIRED BY" 57 | 285 PRINT "GIVING A FIRING ANGLE, EXPRESSED IN DEGREES FROM HORIZONTAL" 58 | 290 PRINT \PRINT "THE COMPUTER WILL KEEP TRACK OF THE GAME AND REPORT AFTER EACH" 59 | 295 PRINT "MOVE. A 'HIT' IS SCORED BY FIRING A SHOT WITHIN 5% OF THE TOTAL" 60 | 300 PRINT "DISTANCE FIRED OVER. GOOD LUCK"\PRINT \PRINT \GOTO 35\END 61 | -------------------------------------------------------------------------------- /programs/waves.bas: -------------------------------------------------------------------------------- 1 | 50 REM WAVES-COPYRIGHT 1970, POLYTECHNIC INSTITUTE OF BROOKLYN 2 | 100 REM JOHN W. HOSIE, NORTHPORT HS, PHYSICS, 8/9/68 3 | 105 REM REVISED BY C.LOSIK 8-17-70 4 | 110 REM WE SORT THE W(I) TO PLOT THE WAVE VALUES. 5 | 115 REM L,A,P ARE WAVELENGTH, AMPLITUDE, AND PHASE 6 | 120 DIM W(3) 7 | 124 REM TWO PI ! 8 | 125 LET P2=2*3.14159 9 | 130 PRINT " ","WAVES AND THEIR SUPERPOSITION" 10 | 140 PRINT "DO YOU NEED INSTRUCTIONS (1=YES, 0=NO) : "; 11 | 150 INPUT A 12 | 160 IF A=0 THEN 350 13 | 170 IF A<>1 THEN 140 14 | 180 PRINT 15 | 190 PRINT "IN THIS PROGRAM YOU MAY OBSERVE THE EFFECTS OF" 16 | 200 PRINT "CHANGING WAVELENGTH, AMPLITUDE, AND PHASE ON TWO" 17 | 210 PRINT "WAVES AND ON THEIR SUM (OR SUPERPOSITION)." 18 | 220 PRINT 19 | 230 PRINT "WAVE 'A' IS FIXED. ITS WAVELENGTH IS 4, ITS AMPLITUDE" 20 | 240 PRINT "IS 10, AND ITS PHASE IS 0." 21 | 250 PRINT 22 | 260 PRINT "WAVE 'B' MAY BE CHANGED BY YOU. FOR BEST RESULTS :" 23 | 270 PRINT " ","WAVELENGTH (L) BETWEEN 2 AND 4" 24 | 280 PRINT " ","AMPLITUDE (A) BETWEEN 5 AND 10" 25 | 290 PRINT " ","PHASE (P) BETWEEN 0 AND 1" 26 | 300 PRINT " ","(FOR EXAMPLE, .5 PHASE = 1/2 WAVELENGTH" 27 | 310 PRINT 28 | 320 PRINT "IT IS EASIEST TO SEE THE EFFECTS OF CHANGES IN EACH" 29 | 330 PRINT "PARAMETER IF YOU HOLD TWO CONSTANT AND VARY THE OTHER," 30 | 340 PRINT "ALTHOUGH ALL THREE MAY BE VARIED AT ONCE." 31 | 350 PRINT 32 | 360 PRINT "WHAT IS YOUR CHOICE OF WAVELENGTH, AMPLITUDE, AND PHASE"; 33 | 370 INPUT L,A,P 34 | 373 IF L>0 THEN 380 35 | 375 PRINT "WAVELENGTH IS ALWAYS A POSITIVE QUANTITY." 36 | 377 GO TO 350 37 | 380 IF L<=8 THEN 410 38 | 390 PRINT "YOUR WAVELENGTH IS TOO LONG FOR GOOD DISPLAY." 39 | 400 GO TO 350 40 | 410 IF L>=1 THEN 415 41 | 412 PRINT "YOUR WAVELENGTH IS TOO SHORT FOR GOOD DISPLAY." 42 | 413 GO TO 350 43 | 415 IF ABS(A)<=15 THEN 440 44 | 420 PRINT "YOUR AMPLITUDE IS TOO LARGE FOR DISPLAY." 45 | 430 GO TO 350 46 | 440 IF ABS(P-.5)<=.5 THEN 470 47 | 450 PRINT "YOUR PHASE CAN ONLY BE BETWEEN 0 AND 1." 48 | 460 GO TO 350 49 | 470 PRINT 50 | 480 PRINT "NOTATION:","A = 'A' WAVE" 51 | 490 PRINT " ","B = 'B' WAVE" 52 | 500 PRINT " ","S = SUPERPOSITION WAVE" 53 | 510 PRINT 54 | 520 PRINT " X (CM.)"," -20 -10 0 +10 +20" 55 | 530 PRINT " ","-I----I---------I---------I---------I---------I----I" 56 | 540 FOR X=0 TO 4 STEP .2 57 | 545 PRINT " "; INT(10*X+.5)/10,"-"; 58 | 550 LET W(1)=INT(10*SIN(P2*X/4)+.5) 59 | 560 LET W(2)=INT(A*SIN(P2*(X/L+P))+.5) 60 | 570 LET W(3)=INT(W(1)+W(2)+.5) 61 | 580 REM FIND WHICH IS SMALLEST, THEN PRINT IT AND MAXIMIZE IT 62 | 600 FOR Q=1 TO 3 63 | 605 LET K=1E20 64 | 610 FOR I=1 TO 3 65 | 620 IF W(I)>K THEN 640 66 | 630 LET K=W(I) 67 | 640 NEXT I 68 | 650 PRINT TAB(K+40); 69 | 660 FOR I=1 TO 3 70 | 670 IF ABS(W(I)-K)<.0001 THEN 700 71 | 680 NEXT I 72 | 690 STOP 73 | 700 IF I<>1 THEN 730 74 | 710 PRINT "A"; 75 | 720 GO TO 780 76 | 730 IF I<>2 THEN 760 77 | 740 PRINT "B"; 78 | 750 GO TO 780 79 | 760 IF I<>3 THEN 690 80 | 770 PRINT "S"; 81 | 780 LET W(I)=1E25 82 | 790 NEXT Q 83 | 795 PRINT " " 84 | 800 NEXT X 85 | 810 PRINT " ","-I----I---------I---------I---------I---------I----I" 86 | 820 PRINT 87 | 830 PRINT "WANT TO TRY ANOTHER SET OF VALUES (1=YES, 0=NO) : "; 88 | 840 INPUT A 89 | 850 IF A=1 THEN 350 90 | 860 IF A<>0 THEN 820 91 | 870 END 92 | -------------------------------------------------------------------------------- /programs/weekday.bas: -------------------------------------------------------------------------------- 1 | 10 PRINT "" 2 | 120 PRINT 3 | 124 LET Y1=1970 4 | 130 PRINT " ENTER TODAY'S DATE IN THIS FORM: MONTH,DAY,YEAR"; 5 | 140 INPUT M1,D1,Y1 6 | 150 IF Y1>100 THEN 170 7 | 160 LET Y1=Y1+1900 8 | 170 DEF FNA(A)=INT(A/4) 9 | 180 DIM T(12) 10 | 190 DEF FNB(A)=INT(A/7) 11 | 210 FOR I=1 TO 12 12 | 220 READ T(I) 13 | 230 NEXT I 14 | 240 PRINT 15 | 241 PRINT " THIS PROGRAM DEMONSTRATES LSI-11 MU BASIC AND ALSO GIVES" 16 | 242 PRINT "FACTS ABOUT A DATE OF INTEREST TO YOU" 17 | 244 PRINT 18 | 245 PRINT "ENTER DATE OF BIRTH IN THIS FORM: MONTH,DAY,YEAR"; 19 | 250 INPUT M,D,Y 20 | 260 PRINT 21 | 270 IF Y-75>0 THEN 280 22 | 275 LET Y=Y+1900 23 | 280 LET I1=INT((Y-1500)/100) 24 | 290 IF Y-1582<0 THEN 1300 25 | 300 LET A=I1*5+(I1+3)/4 26 | 310 LET I2=INT(A-FNB(A)*7) 27 | 320 LET Y2=INT(Y/100) 28 | 330 LET Y3=INT(Y-Y2*100) 29 | 340 LET A=Y3/4+Y3+D+T(M)+I2 30 | 350 LET B=INT(A-FNB(A)*7)+1 31 | 360 IF M>2 THEN 470 32 | 370 IF Y3=0 THEN 440 33 | 380 LET T1=INT(Y-FNA(Y)*4) 34 | 390 IF T1<>0 THEN 470 35 | 400 IF B<>0 THEN 420 36 | 410 LET B=6 37 | 420 LET B=B-1 38 | 430 GO TO 470 39 | 440 LET A=I1-1 40 | 450 LET T1=INT(A-FNA(A)*4) 41 | 460 IF T1=0 THEN 400 42 | 470 IF B<>0 THEN 490 43 | 480 LET B=7 44 | 490 IF (Y1*12+M1)*31+D1<(Y*12+M)*31+D THEN 550 45 | 500 IF (Y1*12+M1)*31+D1=(Y*12+M)*31+D THEN 530 46 | 510 PRINT M;"/";D;"/";Y;" WAS A "; 47 | 520 GO TO 570 48 | 530 PRINT M;"/";D;"/";Y;" IS A "; 49 | 540 GO TO 570 50 | 550 PRINT M;"/";D;"/";Y;" WILL BE A "; 51 | 570 IF B<>1 THEN 590 52 | 580 PRINT "SUNDAY" 53 | 590 IF B<>2 THEN 610 54 | 600 PRINT "MONDAY" 55 | 610 IF B<>3 THEN 630 56 | 620 PRINT "TUESDAY" 57 | 630 IF B<>4 THEN 650 58 | 640 PRINT "WEDNESDAY" 59 | 650 IF B<>5 THEN 670 60 | 660 PRINT "THURSDAY" 61 | 670 IF B<>6 THEN 690 62 | 680 GO TO 1250 63 | 690 IF B<>7 THEN 710 64 | 700 PRINT "SATURDAY" 65 | 710 IF (Y1*12+M1)*31+D1=(Y*12+M)*31+D THEN 1120 66 | 720 LET I5=Y1-Y 67 | 730 PRINT 68 | 740 LET I6=M1-M 69 | 750 LET I7=D1-D 70 | 760 IF I7>=0 THEN 790 71 | 770 LET I6=I6-1 72 | 780 LET I7=I7+30 73 | 790 IF I6>=0 THEN 820 74 | 800 LET I5=I5-1 75 | 810 LET I6=I6+12 76 | 820 IF I5<0 THEN 1310 77 | 830 IF I7<>0 THEN 850 78 | 835 IF I6<>0 THEN 850 79 | 840 PRINT "****HAPPY BIRTHDAY*****" 80 | 850 PRINT " "," ","YEARS","MONTHS","DAYS" 81 | 860 PRINT "YOUR AGE ",I5,I6,I7 82 | 870 LET A8=(I5*365)+(I6*30)+I7+INT(I6/2) 83 | 880 LET K5=I5 84 | 890 LET K6=I6 85 | 900 LET K7=I7 86 | 920 LET E=Y+65 87 | 940 LET F=.35 88 | 950 PRINT "YOU HAVE SLEPT ", 89 | 960 GOSUB 1370 90 | 970 LET F=.17 91 | 980 PRINT "YOU HAVE EATEN ", 92 | 990 GOSUB 1370 93 | 1000 LET F=.23 94 | 1010 IF K5>3 THEN 1040 95 | 1020 PRINT "YOU HAVE PLAYED ", 96 | 1030 GO TO 1080 97 | 1040 IF K5>9 THEN 1070 98 | 1050 PRINT "YOU HAVE PLAYED/STUDIED", 99 | 1060 GO TO 1080 100 | 1070 PRINT "YOU HAVE WORKED/STUDIED", 101 | 1080 GOSUB 1370 102 | 1090 PRINT "YOU HAVE RELAXED ",K5,K6,K7 103 | 1100 PRINT 104 | 1110 PRINT " ","**YOU MAY RETIRE IN";E;"**" 105 | 1120 PRINT 106 | 1130 PRINT " CALCULATED BY THE BEST M I C R O C O M P U T E R TODAY THE L S I - 11" 107 | 1140 FOR Q=1 TO 2 108 | 1150 PRINT 109 | 1160 NEXT Q 110 | 1170 PRINT 111 | 1240 GO TO 240 112 | 1250 IF D=13 THEN 1280 113 | 1260 PRINT "FRIDAY " 114 | 1270 GO TO 710 115 | 1280 PRINT "FRIDAY THE THIRTEENT@---BEWARE!" 116 | 1290 GO TO 710 117 | 1300 PRINT "NOT PREPARED TO GIVE DAY OF WEEK PRIOR TO MDLXPXII -" 118 | 1305 PRINT " THE CURRENT CALENDAR DID NOT EXIST BEFORE THAT YEAR." 119 | 1310 GO TO 1140 120 | 1330 DATA 0,3,3,6,1,4,6,2,5,0,3,5 121 | 1370 LET K1=INT(F*A8) 122 | 1380 LET I5=INT(K1/365) 123 | 1390 LET K1=K1-(I5*365) 124 | 1400 LET I6=INT(K1/30) 125 | 1410 LET I7=K1-(I6*30) 126 | 1420 LET K5=K5-I5 127 | 1430 LET K6=K6-I6 128 | 1440 LET K7=K7-I7 129 | 1450 IF K7>=0 THEN 1480 130 | 1460 LET K7=K7+30 131 | 1470 LET K6=K6-1 132 | 1480 IF K6>0 THEN 1510 133 | 1490 LET K6=K6+12 134 | 1500 LET K5=K5-1 135 | 1510 PRINT I5,I6,I7 136 | 1520 RETURN 137 | 1530 IF K6=12 THEN 1550 138 | 1540 GO TO 1090 139 | 1550 LET K5=K5+1 140 | 1560 LET K6=0 141 | 1570 GO TO 1090 142 | 1580 END 143 | -------------------------------------------------------------------------------- /qio.inc: -------------------------------------------------------------------------------- 1 | ; QDB structure offsets 2 | 3 | Q.FUNC equ 0 ; function code (1 byte) 4 | Q.SUBF equ Q.FUNC + 1 ; subfunction (1 byte) 5 | Q.LUN equ Q.SUBF + 1 ; logical unit number (1 byte) 6 | Q.EFN equ Q.LUN + 1 ; event flag number (1 byte) 7 | Q.WAIT equ Q.EFN + 1 ; wait flag (1 byte) 8 | Q.IOSB equ Q.WAIT + 1 ; I/O Status Block address (2 bytes) 9 | Q.AST equ Q.IOSB + 2 ; AST routine address (2 bytes) 10 | Q.P1 equ Q.AST + 2 ; function-dependent param 1 (2 bytes) 11 | Q.P2 equ Q.P1 + 2 ; function-dependent param 2 (2 bytes) 12 | Q.P3 equ Q.P2 + 2 ; function-dependent param 3 (2 bytes) 13 | Q.P4 equ Q.P3 + 2 ; function-dependent param 4 (2 bytes) 14 | Q.P5 equ Q.P4 + 2 ; function-dependent param 5 (2 bytes) 15 | Q.P6 equ Q.P5 + 2 ; function-dependent param 6 (2 bytes) 16 | 17 | QDBSZ equ Q.P6 + 2 ; QDB size 18 | 19 | ; Standard parameter mapping 20 | 21 | Q.BUF equ Q.P1 ; buffer address in user space (2 bytes) 22 | Q.LEN equ Q.P2 ; byte count (2 bytes) 23 | Q.VFC equ Q.P3 ; vertical format control (2 bytes) 24 | Q.TMO equ Q.P3 ; read timeout (2 bytes) 25 | Q.BLK equ Q.P4 ; block number (4 bytes) 26 | Q.OFS equ Q.P6 ; offset within block (2 bytes) 27 | Q.PRB equ Q.P4 ; prompt buffer address (2 bytes) 28 | Q.PRL equ Q.P5 ; prompt length (2 bytes) 29 | Q.PVF equ Q.P6 ; prompt vertical format control (2 bytes) 30 | 31 | ; QIO function codes 32 | 33 | ; Standard functions 34 | 35 | IO.KIL equ 0 ; cancel I/O requests 36 | IO.ATT equ 1 ; attach device 37 | IO.DET equ 2 ; detach device 38 | IO.RLB equ 3 ; read logical block 39 | IO.WLB equ 4 ; write logical block 40 | IO.SEC equ 5 ; sense characteristics 41 | 42 | ; Additional disk driver functions 43 | 44 | IO.RPB equ 6 ; read physical block 45 | IO.WPB equ 7 ; write physical block 46 | IO.FMT equ 8 ; format track 47 | IO.IDN equ 9 ; read drive identification (IDE) 48 | 49 | ; Additional terminal functions 50 | 51 | IO.RPR equ 9 ; read with prompt 52 | IO.HNG equ 10 ; hangup remote line 53 | SF.GMC equ 11 ; get multiple characteristics 54 | SF.SMC equ 12 ; set multiple characteristics 55 | 56 | ; Special functions 57 | 58 | IO.LOV equ 16 ; load overlay 59 | 60 | ; Terminal sub-functions (some can be ORed) 61 | 62 | TF.AST equ 01h ; attach with AST 63 | TF.RNE equ 01h ; read with no echo 64 | TF.RAL equ 02h ; read all bits (unfiltered) 65 | TF.WAL equ 02h ; write all bits 66 | TF.TMO equ 04h ; read with timeout 67 | TF.WBT equ 08h ; break-through write 68 | TF.CCO equ 10h ; cancel ^O 69 | TF.XOF equ 20h ; send XOFF 70 | 71 | ; Filesystem requests 72 | 73 | IO.CRE equ 20 ; create file 74 | IO.ACC equ 21 ; access (open) file 75 | IO.DEA equ 22 ; deaccess (close) file 76 | IO.RVB equ 23 ; read virtual block 77 | IO.WVB equ 24 ; write virtual block 78 | IO.RAT equ 25 ; read attributes 79 | IO.WAT equ 26 ; write attributes 80 | IO.UNL equ 27 ; unlock file 81 | IO.DEL equ 28 ; delete file 82 | IO.REN equ 29 ; rename file 83 | IO.CLN equ 30 ; cleanup file 84 | IO.EXT equ 31 ; extend file 85 | IO.TRN equ 32 ; truncate file 86 | IO.MNT equ 33 ; mount device 87 | IO.DSM equ 34 ; dismount device 88 | IO.FFS equ 35 ; flush all disk buffers 89 | 90 | ; File I/O subfunctions (can be ORed) 91 | 92 | SF.ACR equ 01h ; access (open) for read 93 | SF.ACW equ 02h ; access (open) for write 94 | SF.SHR equ 08h ; open in shared mode 95 | SF.FID equ 10h ; access (open) by file ID 96 | SF.TMP equ 20h ; create temporary file (delete on close) 97 | SF.DIR equ 40h ; create directory 98 | SF.CTG equ 80h ; create contiguous file 99 | 100 | SF.TRU equ 20h ; truncate unused blocks 101 | 102 | ; RSX-11M style QIO macros 103 | 104 | QIO$ macro func,lun,efn,wait,iosb,ast,args 105 | dw func ;; note: 16-bit Q.FUNC + Q.SUBF 106 | db lun,efn ;; Q.LUN, Q.EFN 107 | ifb 108 | db 0 ;; Q.WAIT = 0 109 | else 110 | db wait ;; Q.WAIT 111 | endif 112 | dw iosb ;; Q.IOSB 113 | ifb 114 | dw 0 ;; Q.AST = 0 115 | else 116 | dw ast ;; Q.AST 117 | endif 118 | irp arg, 119 | ifb 120 | dw 0 121 | else 122 | dw arg ;; Q.P1..P6 123 | endif 124 | endm 125 | endm 126 | 127 | QIO$S macro func,lun,efn,wait,iosb,ast,args 128 | local n 129 | push ix 130 | ld ix,-QDBSZ 131 | add ix,sp 132 | ld sp,ix 133 | ld (ix+Q.FUNC),low func 134 | ld (ix+Q.SUBF),high func 135 | ld (ix+Q.LUN),lun 136 | ld (ix+Q.EFN),efn 137 | ifb 138 | ld (ix+Q.WAIT),0 139 | else 140 | ld (ix+Q.WAIT),wait 141 | endif 142 | ld hl,iosb 143 | ld (ix+Q.IOSB),l 144 | ld (ix+Q.IOSB+1),h 145 | ifb 146 | ld hl,0 147 | else 148 | ld hl,ast 149 | endif 150 | ld (ix+Q.AST),l 151 | ld (ix+Q.AST+1),h 152 | n defl 0 153 | irp arg, 154 | ifb 155 | ld hl,0 156 | else 157 | ld hl,arg 158 | endif 159 | ld (ix+Q.P1+n),l 160 | ld (ix+Q.P1+n+1),h 161 | n defl n+2 162 | endm 163 | push ix 164 | pop hl 165 | SC .QIO 166 | ld hl,QDBSZ 167 | add hl,sp 168 | ld sp,hl 169 | pop ix 170 | rlca ;; restore carry bit from error code sign 171 | rra ;; (works since all errors are negative) 172 | endm 173 | 174 | QIOW$ macro func,lun,efn,iosb,ast,args 175 | QIO$ func,lun,efn,1,iosb,ast, 176 | endm 177 | 178 | QIOW$S macro func,lun,efn,iosb,ast,args 179 | QIO$S func,lun,efn,1,iosb,ast, 180 | endm 181 | 182 | -------------------------------------------------------------------------------- /sysfn.inc: -------------------------------------------------------------------------------- 1 | ; System function equates 2 | 3 | .EXIT equ 0 ; exit program 4 | .EXIF equ 1 ; exit program if event flag not set 5 | .EMTST equ 2 ; emit status 6 | .QIO equ 3 ; queue I/O packet 7 | .CONN equ 4 ; connect to task 8 | .GTCMD equ 5 ; get command line arguments 9 | .SEND equ 6 ; send data 10 | .RECV equ 7 ; receive data 11 | .WTDAT equ 8 ; wait for data 12 | .ASTDF equ 9 ; declare AST service routine 13 | .ASTCT equ 10 ; AST control (enable/disable AST types) 14 | .ASTX equ 11 ; exit AST service routine 15 | .ALUN equ 12 ; assign LUN to device 16 | .GTLUN equ 13 ; get LUN information 17 | .GDIR equ 14 ; get current dir name 18 | .SDIR equ 15 ; set current dir 19 | .GDAT equ 16 ; get date and time 20 | .SDAT equ 17 ; set date and time 21 | .RQST equ 18 ; request installed task 22 | .RPOI equ 19 ; request and pass offspring information 23 | .ABORT equ 20 ; abort a task 24 | .STOP equ 21 ; stop task 25 | .RESUM equ 22 ; resume task 26 | .CLEF equ 23 ; clear event flag 27 | .SETF equ 24 ; set single event flag 28 | .RDEF equ 25 ; read event flag 29 | .WTSE equ 26 ; wait for single event flag 30 | .STSE equ 27 ; stop for single event flag 31 | .WTLO equ 28 ; wait for logical OR of event flags 32 | .STLO equ 29 ; stop for logical OR of event flags 33 | .RUN equ 30 ; request installed task at specified time 34 | .CSRQ equ 31 ; cancel scheduled task request 35 | .MRKT equ 32 ; mark time request 36 | .CMKT equ 33 ; cancel mark time request 37 | .EXTSK equ 34 ; extend task size 38 | .ALTPR equ 35 ; change task priority 39 | .SUPER equ 36 ; enter/exit supervisor mode 40 | .GTSK equ 37 ; get task info 41 | .GTPAR equ 38 ; get partition info 42 | .GCII equ 39 ; get command interpreter info 43 | .GIN equ 40 ; get general info 44 | 45 | MAXFN equ 40 46 | 47 | SYSRST equ 20h ; system call RST is RST 4 48 | DBGRST equ 30h ; debug breakpoint RST is RST 6 49 | 50 | ; .GDIR subfunction codes 51 | 52 | GD.TSK equ 0 ; get task's current directory 53 | GD.TI equ 1 ; get terminal's current directory 54 | GD.LOG equ 2 ; get terminal's login directory 55 | 56 | ; .SDIR subfunction codes 57 | 58 | SD.TSK equ 0 ; set task's current directory 59 | SD.TI equ 1 ; set terminal's current directory 60 | 61 | ; .GIN subfunction codes 62 | 63 | I.VERS equ 0 ; get system version 64 | I.SMEM equ 1 ; get system memory info 65 | I.USCB equ 2 ; get user's SCB 66 | I.TSCB equ 3 ; get SCB of terminal device 67 | I.HOST equ 4 ; get host name 68 | I.TCKS equ 5 ; get ticks per second 69 | I.FEAT equ 6 ; get feature bits 70 | 71 | ; Macro to call system services 72 | 73 | SC MACRO func 74 | rst SYSRST 75 | db func 76 | ENDM 77 | 78 | -------------------------------------------------------------------------------- /tcb.inc: -------------------------------------------------------------------------------- 1 | ; Task Control Block structure 2 | 3 | T.LNK equ 0 ; utility link field (2 bytes) 4 | T.TCBL equ T.LNK + 2 ; link to next TCB in directory list (2 bytes) 5 | T.ACTL equ T.TCBL + 2 ; link to next TCB in active task list (2 bytes) 6 | T.ATTR equ T.ACTL + 2 ; attributes (1 byte) 7 | T.ST equ T.ATTR + 1 ; status (2 bytes) 8 | T.DPRI equ T.ST + 2 ; default priority (1 byte) 9 | T.PRI equ T.DPRI + 1 ; current priority (1 byte) 10 | T.SPRI equ T.PRI + 1 ; current swap priority (1 byte) 11 | T.NAME equ T.SPRI + 1 ; task name (6 characters) 12 | T.VID equ T.NAME + 6 ; task version identification (6 characters) 13 | T.CMD equ T.VID + 6 ; pointer to command line block (2 bytes) 14 | T.IOC equ T.CMD + 2 ; outstanding I/O count (1 byte) 15 | T.RCVL equ T.IOC + 1 ; pointer to receive queue (2 bytes) 16 | T.OCBL equ T.RCVL + 2 ; pointer to list of OCBs (2 bytes) 17 | T.SAST equ T.OCBL + 2 ; pointer to list of specified ASTs (2 bytes) 18 | T.ASTL equ T.SAST + 2 ; pointer to list of AST events (2 bytes) 19 | T.SVST equ T.ASTL + 2 ; saved task status during AST (2 bytes) 20 | T.FLGS equ T.SVST + 2 ; task event flags (4 bytes = 32 flags) 21 | T.WAIT equ T.FLGS + 4 ; flag wait mask (4 bytes) 22 | T.CTX equ T.WAIT + 4 ; pointer to Context Block (2 bytes) 23 | T.TI equ T.CTX + 2 ; UCB of terminal device (2 bytes) 24 | T.LDEV equ T.TI + 2 ; UCB of load device (2 bytes) 25 | T.SBLK equ T.LDEV + 2 ; task starting disk block number (4 bytes) 26 | T.NBLK equ T.SBLK + 4 ; task size in disk blocks (2 bytes) 27 | T.PCB equ T.NBLK + 2 ; pointer to PCB (2 bytes) 28 | T.CPCB equ T.PCB + 2 ; pointer to checkpoint PCB (2 bytes) 29 | T.STRT equ T.CPCB + 2 ; start address (2 bytes) 30 | T.DEND equ T.STRT + 2 ; default end address (2 bytes) 31 | T.END equ T.DEND + 2 ; current end address (2 bytes) 32 | T.EPT equ T.END + 2 ; entry point (2 bytes) 33 | T.SP equ T.EPT + 2 ; task SP (2 bytes) 34 | 35 | ; TCB size 36 | 37 | TCBSZ equ T.SP + 2 38 | 39 | ; Attribute bit numbers 40 | 41 | TA.PRV equ 0 ; task is privileged 42 | TA.REM equ 1 ; remove on exit 43 | TA.AST equ 2 ; AST recognition enabled 44 | TA.FIX equ 3 ; task fixed in memory 45 | TA.MCR equ 4 ; task is external MCR function 46 | TA.CLI equ 5 ; task is a CLI 47 | TA.ACP equ 6 ; task is an ACP 48 | TA.CKD equ 7 ; checkpointing disabled 49 | 50 | ; Status bit numbers 51 | 52 | TS.ACT equ 0 ; task active 53 | TS.AST equ 1 ; task is executing an AST 54 | TS.SUP equ 2 ; task is in supervisor mode 55 | TS.CKR equ 3 ; checkpoint requested 56 | 57 | T2.STP equ 0 ; stopped \ 58 | T2.SEF equ 1 ; stopped for event flag | 59 | T2.EFW equ 2 ; event flag waiting | "blocking" bits: 60 | T2.WTD equ 3 ; waiting for data | all zero means 61 | T2.OUT equ 4 ; task is out of memory | task is executing 62 | T2.CKP equ 5 ; task is checkpointed | 63 | T2.LDR equ 6 ; task is being loaded | 64 | T2.ABO equ 7 ; task is being aborted / 65 | 66 | ; Task Context Block structure 67 | 68 | TX.UID equ 0 ; protection user ID (1 byte) 69 | TX.GID equ TX.UID + 1 ; protection group ID (1 byte) 70 | TX.DIR equ TX.GID + 1 ; task's current directory (9 bytes) 71 | TX.SWM equ TX.DIR + 9 ; saved flag wait mask during AST (4 bytes) 72 | TX.LUT equ TX.SWM + 4 ; LUN translation table (64 bytes) 73 | 74 | ; Context Block size 75 | 76 | CTXSZ equ TX.LUT + 64 77 | 78 | ; Task Descriptor Block 79 | 80 | TD.NAME equ 0 ; task name (6 characters) 81 | TD.CMD equ TD.NAME + 6 ; address of command line block (2 bytes) 82 | TD.CML equ TD.CMD + 2 ; length of command (2 bytes) 83 | TD.ATTR equ TD.CML + 2 ; initial attributes (1 byte) 84 | TD.USR equ TD.ATTR + 1 ; user number (1 byte) 85 | TD.GRP equ TD.USR + 1 ; group number (1 byte) 86 | TD.TI equ TD.GRP + 1 ; console device and unit (3 bytes) 87 | TD.SDAT equ TD.TI + 3 ; address of data block to send (2 bytes) 88 | TD.SLEN equ TD.SDAT + 2 ; size of data block to send (2 bytes) 89 | 90 | ; TDB size 91 | 92 | TDBSZ equ TD.SLEN + 2 93 | 94 | ; Offspring Control Block 95 | 96 | O.LNK equ 0 ; link to next OCB in list (2 bytes) 97 | O.PTCB equ O.LNK + 2 ; address of parent's TCB (2 bytes) 98 | O.EFN equ O.PTCB + 2 ; event flag number (1 byte) 99 | O.ESB equ O.EFN + 1 ; addr of parent's exit status block (2 bytes) 100 | O.ST equ O.ESB + 2 ; status (2 bytes) 101 | 102 | ; OCB size 103 | 104 | OCBSZ equ O.ST + 2 105 | 106 | ; Structure returned by the .GTSK Get Task Info system call 107 | 108 | GT.ATTR equ 0 ; task attributes (1 byte) 109 | GT.ST equ GT.ATTR + 1 ; task status (2 bytes) 110 | GT.DPRI equ GT.ST + 2 ; default priority (1 byte) 111 | GT.PRI equ GT.DPRI + 1 ; current priority (1 byte) 112 | GT.NAME equ GT.PRI + 1 ; task name (6 characters) 113 | GT.VID equ GT.NAME + 6 ; task version identification (6 characters) 114 | GT.TI equ GT.VID + 6 ; console device and unit (3 bytes) 115 | GT.LDEV equ GT.TI + 3 ; load device and unit (3 bytes) 116 | GT.SBLK equ GT.LDEV + 3 ; task starting disk block number (4 bytes) 117 | GT.NBLK equ GT.SBLK + 4 ; task size in disk blocks (2 bytes) 118 | GT.PAR equ GT.NBLK + 2 ; partition name (6 bytes) 119 | GT.STRT equ GT.PAR + 6 ; start address (2 bytes) 120 | GT.DEND equ GT.STRT + 2 ; default end address (2 bytes) 121 | GT.END equ GT.DEND + 2 ; end address (2 bytes) 122 | GT.EPT equ GT.END + 2 ; entry point (2 bytes) 123 | 124 | ; GTIB size 125 | 126 | GTKSZ equ GT.EPT + 2 127 | 128 | --------------------------------------------------------------------------------