IMD 1.18: 22/01/1996 7:11:32 micro cornucopia kaypro user group disk 20 graphics programs for micrisheres color graphic board     20-DISK DOC CRC COMCRC DOC CRCKLISTCRC HIGHSCR PAC PAC SUB PACDEFS H  PACINIT C ;PACMAN C 1PACMAN COM !"#$%&'()*+,-.PACMAN COM>/0123456PACMAN SCRp789:;<=>?@ABCDPACMONSTC &EFGHIPACUTIL C )JKLMNOPIE BASEPQRSTUVWXPIE COMYZ[\]^_`abcdefgh Kaypro Disk #20 Graphics Programs for Micro Sphere's Color Graphics Board SKETCH.BAS An interactive sketching program written in SKETCH.COM SBASIC. SKETCH.SCR The blank sketch pad for SKETCH. SKETCH.DOC Documentation file for using SKETCH.COM. ------------------------------------------------------------------------- PIE.DOC PIE.COM A pie chart generator for the color graphics PIE.BAS board written in SBASIC. TEXT.OUT A random access file used by PIE.COPIE COMJijklmnopqrPIE DOC stPORTS O uSKETCH BASvwxyz{|}~SKETCH BASMSKETCH COMSKETCH COMSKETCH DOC0SKETCH SCRpTEXT OUTIM. ------------------------------------------------------------------------- PACMAN.COM Pacman game for Micro Sphere's color graphics board with the Joy Stick modification from Micro Cornucopia's issue #16. PACMAN.C These files compose the source code of Pacman PACMONST.C written in Aztec C from Manx Software. PACDEFS.H PACINIT.C PACUTIL.C PAC.SUB This file is a submit file for compiling pacman. PAC This file is a link file for linking the pacman modules together for LN.COM   the Aztec linking loader. (Used by PAC.SUB). PACMAN.SCR The game board image. ------------------------------------------------------------------------- To verify the files on this disk enter CRC ------------------------------------------------------------------------- *#"ɯ2i2}! "!"]]2 s : ~# ++FILE NOT FOUND++$: F*}’">͇†]<  CANNOT CLOSE CRCFILE$CRCKLISTCRCSK FULL: CRCFILE$  w# !]͐ DONE$!e S!]Q !eZ @ --> FILE: XXXXXXXX.XXX CRC = oS) \<‘@ ++OPEN FAILED++ !" !" * | ʹ) \!~2 #" Ý: ) > T : ) @ ++FILE READ Eth file - ! ~T #M M 2 2 2 2 ! >2 3o: : @ ***No CRC Files found***$> ʉ ʉw#: <2 P6: .6@ Can not parse string ! ~ʽT #ñM ! > 6 #6^#6! ~T #! 4M #x] #e w~ T #>2 @ - s M@ File not found ! 4 >2 o: G: „: G: „@ *Match* 2 ! 4@ <-- is, was --> : ) > T : ) M 2 ! 4<2 ~# @ Not a space between CRC values<2 G-CATALOG??? Using CRC Type CRC to verify all the files on this disk. Type CRC *.* F to generate CRC's for an entire disk and create a CRC file (CRCKLIST.CRC) for checking the CRC's of a copy of the disk etc. Omitting the F will suppress creation of a CRCKLIST.CRC file. *.* can be replaced with an unambiguous file name for checking just one file. RROR++ <* |): o% |g}o" 2  ; 0T ~T #~A > T > _h : F{͇2h2|: ʲ !\   :\2 ! \  \ ! \  \! \  \<7=Ɓo&   ]  2h2|2   ~$#~# x  : F} *}= ">͇1 ].”#””͡”››tK››͸›* =: =͔="  ʳ ª~#.  ¿~  #~  .+~#0:0~#!A.O.Gy~#0M0 K MMɷ:m2 FSÄCRCKLIST$$$››tK›, › **}|!"*{z*~]*"Ü  DISK FULL: CRCFILE$!"*~#CRC.COM 5.0 6/18/82CRCKFILE???!9" 1 M @ CRC Ver 5.0 CTL-S pauses, CTL-C aborts :] O@ ++Searching for CRCKLIST file++@ Now searching for "CRCKFILE" file++ !  1 .) F!  ͡]͸! ͔0CRCKLIST???CRCKFILE???!9" M à*,*.}|ډ!".*,{z{** u*.".G*.",!".***,}>*.#".ɯ22)! ",". <  NO FILECRC FILE$!   >. @ Checking wi match - : ̓ : J M @ Quantity of lines failed parse test - : ̓ : ~ M @ Quantity of file(s) not found - : ̓ * d͔  ͔ 0T  Җ Wyʩ 0T 0ztiil   --> FILE: SKETCH .BAS CRC = 1C B4 --> FILE: SKETCH .COM CRC = 7B 1E --> FILE: SKETCH .DOC CRC = 42 5D --> FILE: PACDEFS .H CRC = 31 6E --> FILE: PORTS .O CRC = B8 3A --> FILE: PAC .SUB CRC = B3 07 --> FILE: PAC . CRC = 73 CB --> FILE: PACMAN .SCR CRC = AE 75 --> FILE: HIGHSCR .PAC CRC = A7 2C --> FILE: PIE .BAS CRC = D8 ED --> FILE: PIE .COM CRC = 71 FB --> FILE: PACMAN .COM CRC = 2F 62 --> FILE: PACMONST.C CRC = 06 2D --> FILE: PACMA #define WHITE 15 #define TRUE 1 #define FALSE 0 #define ON 1 #define OFF 0 #define READ 1 #define WRITE 0 #define RUN 1 #define START 0 #define PNTBASE 0x1c00 #define SATBASE 0x1f00 #define MAXPAC 5 #define PAC 0 #define MAXMONSTER 4 #define MSTARTX 11 #define MSTARTY 12 #define BLANK 160 #define DNULL 0 #define DUP 1 #define DDOWN 2 #define DLEFT 3 #define DRIGHT 4 #define UPINT (-1) #define DOWNINT 1 #define LEFTINT (-1) #define RIGHTINT 1 #define GOLD N .C CRC = B0 61 --> FILE: PACINIT .C CRC = D0 37 --> FILE: PACUTIL .C CRC = A6 04 --> FILE: PIE .DOC CRC = 9F 95 --> FILE: TEXT .OUT CRC = B9 67 --> FILE: 20-DISK .DOC CRC = 29 44 --> FILE: SKETCH .SCR CRC = B8 9D --> FILE: CRC .COM CRC = B2 07 --> FILE: CRC .DOC CRC = E5 81/* VDP Version of PACMAN -- Header file */ /* 29 December 1983 Version 2.1 */ /* #define BIGBOARD */ #define KAYPRO /* #define SIO */ #define JOYSTICK /* #define KEYBOARD */ #ifdef BIGBOARD #define VDPDATA 0x0a #define VDPCNTL 0x0b #define KBDPORT 0x1e #define KEYMASK 0xff #define SYSPORT 0x1c #endif #ifdef KAYPRO #define VDPDATA 0x1e #define VDPCNTL 0x1f #define KBDPORT 0x05 #define KEYMASK 0x00 #define SYSPORT 0x0a #endif #ifdef SIO #define VDPDATA 0x04 #czii -x3000 pacman.c as pacman.asm era pacman.asm czii pacmonst.c as pacmonst.asm era pacmonst.asm czii -z3000 pacinit.c as pacinit.asm era pacinit.asm czii pacutil.c as pacutil.asm era pacutil.asm ln -f pac  '.' #define TREASURE '$' #define POTION '%' #define VACANT ' ' #define WALL '#' #define BRDX 32 #define BRDY 24 #define XWRAP 31 #define TREASVAL 15 #define KILLSCORE 20 #define FIRSTMAN 1500 #define NEWMAN 1000 #define MSGLOC 459 #define MSGLNGT 11 #define MSTARTINTVL 10 #define POTINTVL 25 #define GOLDCNT 272 struct pactyp { char ypos; char xpos; char name; char color; char dirn; char stat; }; EXTERN struct pactyp monst[MAXMONSTER + 1], *mptr, *pacp7604 Don Brittain 15 September 1983define VDPCNTL 0x06 #define KBDPORT 0x05 #define KEYMASK 0x00 #define BSIO 0x05 #define SYSPORT 0x1c #endif #ifdef JOYSTICK #define ONMASK 0x10 #define OFFMASK 0xef #define JOYPORT VDPDATA #define VERTMASK 0x01 #define UPMASK 0x02 #define HORMASK 0x04 #define LEFTMASK 0x08 #define QUIT 'Q' #define SUSPEND 'U' #endif #define BEEP 7 #define CLEAR 0 #define BLACK 1 #define GREEN 2 #define BLUE 4 #define RED 8 #define LTRED 9 #define YELLOW 10 #define LTYELLOW 11  tr; EXTERN char initbrd[BRDY][BRDX], board[BRDY][BRDX], winner[60], up, down, left, right, quit, suspend; EXTERN unsigned score, tempscore, hscore, newman, killscore, treasval, ticks; EXTERN int paccnt, mcnt, rounds, potion, potioncnt, dieflag, delay, goldcnt, killcnt, tmpx, tmpy, olddirn; #define min(x, y) ((x) < (y) ? (x) : (y))  strcpy(initbrd[18],"##%...#......... .........#...%#"); strcpy(initbrd[19],"#####.#.##.###########.##.#.####"); strcpy(initbrd[20],"##......##......#......##......#"); strcpy(initbrd[21],"##.############.#.############.#"); strcpy(initbrd[22],"##.............................#"); strcpy(initbrd[23],"################################"); strcpy(board[0], "################################"); strcpy(board[1], "################################"); strcpy(board[2], "###tbrd[1], "################################"); strcpy(initbrd[2], "################################"); strcpy(initbrd[3], "##..............#..............#"); strcpy(initbrd[4], "##.####.#######.#.#######.####.#"); strcpy(initbrd[5], "##%####.#######.#.#######.####%#"); strcpy(initbrd[6], "##.............................#"); strcpy(initbrd[7], "##.####.##.###########.##.####.#"); strcpy(initbrd[8], "##......##......#......##......#"); strcpy(initbrd[9], "#######.#######.#.####"); strcpy(board[20],"##......##......#......##......#"); strcpy(board[21],"##.############.#.############.#"); strcpy(board[22],"##.............................#"); strcpy(board[23],"################################"); for(mcnt = 0; mcnt < MAXMONSTER + 1; mcnt++) { vdpram((SATBASE + 3) + (4 * mcnt), WRITE); out(VDPDATA, CLEAR); } for(i = 0; i < MAXMONSTER - 1; i++) pntmap(mnstloc[i], BLANK); for(i = 0; i < (MAXPAC - 1); i++) pntmap(pacloc[i], #############################"); strcpy(board[3], "##..............#..............#"); strcpy(board[4], "##.####.#######.#.#######.####.#"); strcpy(board[5], "##%####.#######.#.#######.####%#"); strcpy(board[6], "##.............................#"); strcpy(board[7], "##.####.##.###########.##.####.#"); strcpy(board[8], "##......##......#......##......#"); strcpy(board[9], "#######.#######.#.#######.######"); strcpy(board[10],"#######.##.............##.######"); st#.#.#######.######"); strcpy(initbrd[10],"#######.##.............##.######"); strcpy(initbrd[11],"#######.##.###########.##.######"); strcpy(initbrd[12]," ....# #.... "); strcpy(initbrd[13],"#######.##.###########.##.######"); strcpy(initbrd[14],"#######.##.............##.######"); strcpy(initbrd[15],"#######.##.###########.##.######"); strcpy(initbrd[16],"##..............#..............#"); strcpy(initbrd[17],"##.####.#######.#.#######.####.#"); BLANK); goldinit(); update(); printf("%c%c%c%c%cHigh score to date: %u%c\nBy %s.", 27, '=', 47, 32, CLREOS, hscore, '0', winner); srand(); } #define CLRSCRN 26 instruct() { putchar(CLRSCRN); printf("\n\t\t\t P A C M A N\n\n\t\tVersion 2.1\t12/29/83 DLB"); #ifndef JOYSTICK printf("\n\n\tEnter key for LEFT :"); left = keyset(); printf("\n\t\t\tRIGHT :"); right = keyset(); printf("\n\t\t\tUP :"); up = keyset(); printf("\n/* VDP Pacman game initiallization routines */ /* 29 December 1983 Version 2.1 DLB */ #define EXTERN extern #include "stdio.h" #include "pacdefs.h" extern int pacloc[], mnstloc[]; #ifdef BIGBOARD #define CLREOS 17 #else #define CLREOS 23 #endif init() { register i; score = 0; pacptr = &monst[0]; goldcnt = GOLDCNT; newman = FIRSTMAN; delay = 62 * ticks; strcpy(initbrd[0], "################################"); strcpy(inircpy(board[11],"#######.##.###########.##.######"); strcpy(board[12]," ....# #.... "); strcpy(board[13],"#######.##.###########.##.######"); strcpy(board[14],"#######.##.............##.######"); strcpy(board[15],"#######.##.###########.##.######"); strcpy(board[16],"##..............#..............#"); strcpy(board[17],"##.####.#######.#.#######.####.#"); strcpy(board[18],"##%...#......... .........#...%#"); strcpy(board[19],"#####.#.##.###########.#  \t\t\tDOWN :"); down = keyset(); #endif printf("\n\n\tEnter key for QUIT :"); quit = keyset(); printf("\n\t\t\tSUSPEND :"); suspend = keyset(); setlevel(); } setlevel() { printf("%c%c%c%c%cDifficulty Level (0 - 9) :", 27, '=', 45, 32, CLREOS); ticks = 57 - keyset(); ticks &= 0x0f; } keyset() { int keyhit; while(!(keyhit = keyboard())) ; putchar(' '); if(keyhit < 32) { putchar('^'); putchar(keyhit + 0x40); } e525,526,527,529,530,531,532,533,534,535,536,537,538,539,540,541,542,546, 551,559,561,569,574,579,580,581,583,584,585,586,587,588,589,590,591,593, 594,595,596,597,598,599,600,601,603,604,605,613,615,618,630,633,635,642, 643,644,645,646,647,650,651,652,653,654,655,657,658,659,660,661,662,665, 666,667,668,669,670,674,687,689,702,706,707,708,709,710,711,712,713,714, 715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732, 733,734}; int potionarray[] = {162, 190, (80); } pixcolor(x, y, color1, color0) int color1, color0; unsigned x, y; { unsigned pixaddr; color0 += (color1 *= 0x10); y = 191 - y; pixaddr = 8 * (32 * (y / 8) + x / 8) + y % 8 + 0x2000; vdpram(pixaddr, WRITE); out(VDPDATA, color0); } int goldarray[GOLDCNT] = { 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,113,114,115,116, 117,118,119,120,121,122,123,124,125,126,130,135,143,145,153,158,167,175, 177,185,194,195,196,197,198,199,20/* VDP Pacman main game loop and pacman logic */ /* 29 December 1983 Version 2.1 DLB */ #define EXTERN #include "stdio.h" #include "pacdefs.h" #define SCREEN 2 main() { getscreen(); highscore(); instruct(); game(); } #define STARTPAC 3 game() { init(); for(paccnt = STARTPAC; paccnt > 0; paccnt--) { tempscore = 0; killscore = KILLSCORE; killcnt = 0; dieflag = FALSE; potion = FALSE; gameloop(); } over(); } lse putchar(toupper(keyhit)); return toupper(in(KBDPORT) ^ KEYMASK); } static int goldy[18] = {179, 178, 115, 114, 51, 50, 173, 172, 171, 170, 169, 168, 45, 44, 43, 42, 41, 40}; reinit() { register locx, locy; int i, tmp, color; for(locy = 0; locy < BRDY; locy++) for(locx = 0; locx < BRDX; locx++) board[locy][locx] = initbrd[locy][locx]; treasval = 0; killscore = KILLSCORE; goldcnt = GOLDCNT; potion = FALSE; dieflag = FALSE; 578, 606}; #define GOLDLOC (char)32 #define PTLOC (char)64 goldinit() { register i; for(i = 0; i < GOLDCNT; i++) { vdpram(PNTBASE + goldarray[i], WRITE); out(VDPDATA, GOLDLOC); } for(i = 0; i < 4; i++) { vdpram(PNTBASE + potionarray[i], WRITE); out(VDPDATA, PTLOC); } } 0,201,202,203,204,205,206,207,208,209, 210,211,212,213,214,215,216,217,218,219,220,221,222,226,231,234,246,249, 254,258,259,260,261,262,263,266,267,268,269,270,271,273,274,275,276,277, 278,281,282,283,284,285,286,295,303,305,313,327,330,331,332,333,334,335, 336,337,338,339,340,341,342,345,359,362,374,377,391,392,393,394,406,407, 408,409,423,426,438,441,455,458,459,460,461,462,463,464,465,466,467,468, 469,470,473,487,490,502,505,514,515,516,517,518,519,520,521,522,523,524,  #define PSTARTX 16 #define PSTARTY 18 #define PACSTART 8 #define MONSTER 10 int goldbuf[MSGLNGT]; int ready[MSGLNGT] = {416, 416, 321, 322, 323, 324, 325, 416, 384, 416, 416}; int mnstcolor[MAXMONSTER + 1] = {YELLOW, GREEN, LTRED, RED, YELLOW}; gameloop() { register i; gmlp: pacptr->xpos = PSTARTX; pacptr->ypos = PSTARTY; pacptr->name = PACSTART; pacptr->color = YELLOW; pacptr->dirn = DNULL; display(PAC); xpacs(); for(mptr = &monst[1delay -= (delay / 5); for(mcnt = 0; mcnt < MAXMONSTER + 1; mcnt++) { vdpram((SATBASE + 3) + (4 * mcnt), WRITE); out(VDPDATA, CLEAR); } for(i = 0; i < 18; i++) pixcolor(0, goldy[i], BLACK, BLACK); goldinit(); color = LTYELLOW; for(tmp = 0; tmp < 5; tmp++) { sleep(25); for(i = 0; i < 6; i++) pixcolor(0, goldy[i], color, BLACK); color = (color == LTYELLOW) ? BLACK : LTYELLOW; } for(i = 6; i < 18; i++) pixcolor(0, goldy[i], WHITE, BLACK); sleep  ], mcnt = 1; mcnt < MAXMONSTER+1; mptr++, mcnt++) { mptr->xpos = MSTARTX + (2 * mcnt); mptr->ypos = MSTARTY; mptr->name = MONSTER; mptr->color = mnstcolor[mcnt]; mptr->dirn = DNULL; mptr->stat = START; display(mcnt); } rounds = 1; vdpram(PNTBASE + MSGLOC, READ); for(i = 0; i < MSGLNGT; i++) goldbuf[i]=in(VDPDATA); vdpram(PNTBASE + MSGLOC, WRITE); for(i = 0; i < MSGLNGT; i++) out(VDPDATA, ready[i]); sleep(180); vdpram(PNTBASE + MSGL[tmpx]) == WALL) pacptr->dirn = DNULL; else pacptr->ypos += DOWNINT; break; case DLEFT: if(tmpx <= 1) { pacptr->xpos = XWRAP; movetype = VACANT; break; } pacptr->name = PLEFT; if ((movetype = board[tmpy][tmpx + LEFTINT]) == WALL) pacptr->dirn = DNULL; else pacptr->xpos += LEFTINT; break; case DRIGHT: if(tmpx >= XWRAP) { pacptr->xpos = 2; movetype = VACANT; break; } pacptr->name = PRIGHT; if ((movety delay; i > 0; i--) ; poll(); tmpx = pacptr->xpos; tmpy = pacptr->ypos; board[tmpy][tmpx] = VACANT; vdpram(PNTBASE + 32 * tmpy + tmpx, WRITE); out(VDPDATA, BLANK); switch (pacptr->dirn) { case DUP : if(board[tmpy + UPINT][tmpx] == WALL) pacptr->dirn = olddirn; break; case DDOWN : if(board[tmpy + DOWNINT][tmpx] == WALL) pacptr->dirn = olddirn; break; case DLEFT : if(tmpx <= 1) break; if(board[tmpy][tmpx + LEFTINT] sleep(9); for(i = STRTDIE; i < STOPDIE; i += 4) { vdpram(SATBASE + 2, WRITE); out(VDPDATA, i); sleep(14); } sleep(100); } int gameover[MSGLNGT] = {416,385,323,386,322,416,387,388,322,321,416}; over() { register i; FILE *fopen(), *fp; if(score > hscore) { reinit(); putchar(BEEP); printf("\nNew high score !!!\n"); printf("Enter name and date: "); gets(winner); fp = fopen("highscr.pac", "w"); fprintf(fp, "%1d\n", hscore = score); fputs(winnOC, WRITE); for(i = 0; i < MSGLNGT; i++) out(VDPDATA, goldbuf[i]); while(TRUE) { if(--rounds == 0) { rounds = MSTARTINTVL; startmonst(); } pacman(); if(dieflag) break; display(3); monster(1); if(dieflag) break; display(4); monster(2); if(dieflag) break; if(potion) { display(PAC); if(--potioncnt == 0) { potion = FALSE; killscore = KILLSCORE; for(mcnt = 1; mcnt < MAXMONSTER + 1; mcnt++) monst[mcnt].color = mnstcolor[mcnt]; pe = board[tmpy][tmpx + RIGHTINT]) == WALL) pacptr->dirn = DNULL; else pacptr->xpos += RIGHTINT; break; } switch (movetype) { case GOLD : score++; tempscore++; goldcnt--; break; case TREASURE : score += treasval; tempscore += treasval; treasval = TREASVAL; break; case POTION : potion = TRUE; potioncnt = POTINTVL; for(mptr = &monst[1], mcnt = 0; mcnt < MAXMONSTER; mptr++, mcnt++) mptr->color = BLUE; break; }  == WALL) pacptr->dirn = olddirn; break; case DRIGHT : if(tmpx >= XWRAP) break; if(board[tmpy][tmpx + RIGHTINT] == WALL) pacptr->dirn = olddirn; break; default : pacptr->dirn = olddirn; } switch (pacptr->dirn) { case DUP : pacptr->name = PUP; if ((movetype = board[tmpy + UPINT][tmpx]) == WALL) pacptr->dirn = DNULL; else pacptr->ypos += UPINT; break; case DDOWN: pacptr->name = PDOWN; if ((movetype = board[tmpy + DOWNINT]er, fp); fclose("highscr.pac"); } vdpram(PNTBASE + MSGLOC, WRITE); for(i = 0; i < MSGLNGT; i++) out(VDPDATA, gameover[i]); while(i = keyboard()) ; printf("\nDo you want to play again? "); while(!(i = keyboard())) ; if(i == 'n' || i == 'N') { graphics(OFF); exit(0); } game(); } highscore() { FILE *fopen(), *fp; char scorebuf[7]; if((fp = fopen("highscr.pac", "r")) == NULL) { sprintf(winner, "(No high score information is availab} else if(potioncnt == 4) for(mcnt = 1; mcnt < MAXMONSTER + 1; mcnt++) monst[mcnt].color = WHITE; pacman(); if(dieflag) break; } monster(3); if(dieflag) break; display(PAC); monster(4); if(dieflag) break; display(1); update(); display(2); if(goldcnt <= 0) { sleep(75); reinit(); goto gmlp; } } die(); } #define PLEFT 0 #define PRIGHT 2 #define PUP 4 #define PDOWN 6 pacman() { int movetype, i; for (i = if(score >= newman) { putchar(BEEP); newman += NEWMAN; paccnt = min(MAXPAC, paccnt + 1); xpacs(); } for(mptr = &monst[1], mcnt = 1; mcnt < MAXMONSTER + 1; mptr++, mcnt++) if((mptr->xpos == pacptr->xpos) && (mptr->ypos == pacptr->ypos)) dieflag = dokill(mcnt); offdsply(PAC); } #define STRTDIE 48 #define STOPDIE 101 die() { register i; for(i = 4; i < 4 * MAXMONSTER + 1; i += 4) { vdpram(SATBASE + 3 + i, WRITE); out(VDPDATA, CLEAR); }   le)"); hscore = 0; return; } hscore = atoi(fgets(scorebuf, 7, fp)); fgets(winner, 60, fp); } +!*]_s&!*]_#n&sù*_+N!*]_#s! !9s#rù!*]_##s*_)))))*_9Y#^!9s#r!#ͱ+ʎ!*]_sß!*]_#n&sù, ])!9^#VN*_#"_+*_#"_+*\+"\#a*_*_"_*_*_"_!"_a!"_!"_!!V"[_!"I_/*[_"[_*I_#"I_+*I_+K!*[_###sa,.$%a*_*__-ʦ!U! 1!*__"__*a_#!+ʜ!à*a_#"a_͐%!!V"[_!"I_*[_"[_*I_#"I_+*I_+ *]_#^*[_#^ͱ+ *]_^*[_^ͱ+!|c*_+"_|! "_ͻ g*F\|c!#!U *F\|c!#!U *F\|c*_| !#*_+"_|¿!"_!"E_!"I_Ñ*I_#"I_+*I_+ʼ*I_)K_^#V*I_i,VsÉ*_ͱ+!"I_*I_#"I_+*I_+!*I_i,Vsg*F\|c!U *F\|c!#!U *F\|c!#%!#*\+`!K`&= h r+*H\!9s#rË!9~#fo+s#r#!9^#V!+ʞz&*]_#^"_*]_^"_! *_)))))*_9Ys!*_)))))*_G*!!L+*]_^_"_g *_+ !"_) !*_"_g *_+B !"_M !*_"_g ,   , g *_*[_#s*_*[_s*]_^*_ͱ+ʬ *]_#^*_ͱ+ʬ !9^#Vͅ"F\!9^#Vf$r+!!49s#r!B9^#V)))))!@9~#fo9Y!9s#r!>9^#V!i,V^!9s#r!+G!9^#V!^!#+G!!69~#fo#s#r+)!$9s#r!9^#V!+ʎ!9^#V! ^!#+ʎ!!69~#fo#s#r+)!$9s#r!9^#V!+!9^#V+^!#+!!69~#fo#s#r+)!$9s#r!9^#V!+!9^#V#^!#+!!69 *I_ͅ"F\õ!f$r+!DM. !PYDM`i+Z !`iG*!!L+& ! `&!0DMr !PYDM`ie+ʠ !!G*!L+!`&j !d`&r+*_*\&-* = !U! 1! -! -!m_H/! ! -!9s#r*_"\! !9^#V͢-!9^#V!m_0! x3!!G*!DME `i#DM+`i +h `i)\^#V!L+? 'DM|u h ! -'DM|Š } `inͱ+  `iNͱ+ʰ !*!#@ New high score !!! Enter name and date: highscr.pacw%1d highscr.pac D*_+)))))*_9Y^!#ͱ+.*c_*]_s*_#)))))*_9Y^!#ͱ+\*c_*]_s*_+*_)))))*_9Y+^!#ͱ+ʗ*c_*]_s*_+*_)))))*_9Y#^!#ͱ+*c_*]_s*c_*]_s,1_*]_^â!*]_##s*_+)))))*_9Y^!9s#r!#ͱ+J!*]_sZ!*]_n&sù!*]_##s*_#)))))*_9Y^!9s#r!#ͱ+ʝ!*]_sí!*]_n&sù*_+!*]_#s! !9s#rù!*]_##s*_)))))*_9Y+^!9s#r!#~#fo#s#r+)!$9s#r!)*_%-I*_)X+I*a_+m*_|W!9^#V@!9^#V! ^!#+ʓ!!69~#fo#s#r+)!$9s#rW!9^#V!^!#+!!69~#fo#s#r+)!$9s#rW!9^#V+^!#+!!69~#fo#s#r+)!$9s#rW!9^#V#^!#+=!!69~#fo#s#r+)!$9s#rW,\W*]_#^!B9^#V,! 9s#r*]_^!D9^#V,!9s#r! 9^#V!+ʪ!!9s#r! 9^#V!+!!9s#r!!9s#r!9^#V!+!!9s#r!9^#V!+=r+/) r+!"a_.*a_+"a_#*a_+_!"_!"E_!"G_!"F\!"_c&ͩ r+!*]_#s!*]_s!*]_##s! *]_###s!*]_s!#͐%!!V"[_!"I_*[_"[_*I_#"I_+*I_+8*I_) *[_#s! *[_s! *[_##s*I_)K_^#V*[_###s!*[_s!*[_s*I_#ù!"_!!G*!DMY`i#DM+`i +|!5+`i)]s#rS!!G*!DM×`i#DM+`i +ʺ`i)_^#V!L+Ñ!`&!!G*!DM`i#DM+`i +`i)]^#V!L+o you want to play again? r+! ! -! 9s#rzN ! !m_v6!"\! 9^#V!!9Ͷ/L"\! 9^#V!<!m_Ͷ/highscr.pacr(No high score information is available)r+*_| !!V"[_!"I_ *[_"[_*I_#"I_+*I_+T *[_^zQ ! *[_s!*[_#s!*[_s!)+###*[_s*I_#T r+*H\!9s#ry !9~#fo+s#r#!9^#V!+ʌ h !9^#V!i,V"[_*[_#^"_*[_^"_*[_^!ͱ+ʸ *_*_!9^#V͹ *[_sP !*_"_g !*  !!9s#r!!9s#r!! 9s#r!!29s#rD!29~#fo#s#r+!29^#V!49~#fo+E*_|!29^#V)!"9^#V!9~#foͱ+¡!29^#V)!"9^#V!9~#foͱ+!29^#V)!"9^#V!9~#fo#s#r+)!9s#rB!29^#V)!"9^#V!9~#fo+B!29^#V)!"9^#V!9~#fo+B!29^#V)!"9^#V!9~#fo#s#r+)!9s#r3! 9^#V!+m! 9^#V))!9^#V!49^#V))!"9^#Vr+!U! 1*_|*G_#"G_ͱ+: [o&.ͱ+*\+"\#!$}2 [!@!ͬ*!*_"_!"G_!DM`i#DM+`i*G_##......##......#......##......###.############.#.############.###.............................###################################################################################################################################..............#..............###.####.#######.#.#######.####.###%####.#######.#.#######.####%###.............................###.####.##.###########.##.####.###......##......#......##......########.#######.#.#######.#############.##.............##.#############.##.#####M!2!ZM!S!ZM!t![M!!9[M!!Y[M!!y[M!![M!![M!:![M![![M!|!\M!"I_ä*I_#"I_+*I_+!*I_))G*!!L+Ü!DM`i#DM+`i+!`i)U_^#Vͬ*!DM`i#DM+`i+6!`i)e_^#Vͬ* :#%!m_!0*\!! !/!=!!-!9'##################################################################################################..............#..............###.####.#######G*!!L+ !!9s#r7!!9~#fo#s#r+!9^#V!+p!!!! 9^#V),R^#V!͖"!9&!:#! !9s#r!!9s#rÝ!!9~#fo#s#r+!9^#V!+5"!`&!!9s#r!!9~#fo#s#r+!9^#V!+"!!9^#V! 9^#V),R^#V!͖"!9!!9^#V! ͱ+'"!*"! !9s#rÌ!!!9s#rT"!9~#fo#s#r+!9^#V!+ʍ"!!! 9^#V),R^#V!͖"!9C"!P`&r+!!9~#foi,s#r!9~#fos#r!!9~#fo,!9s#r!9^#V!a+!9^#V!2-!9^#V!2-)+!`i)U_^#Vͬ*`i+C!`i#DM+)U_^#Vͬ*! 9^#V!i,V"[_!!G**[_^)))++!L+*[_#^)))!L+!l!L+!!L+!!G**[_^)))++!L+*[_#^)))!L+*E_)%-*E_ͪ+*E_Pͪ+##DM`i))!L+!!L+! *[_s! 9^#V) *[_#s!*[_s!*[_s! 9^#V#!F`&!!G*!!L+*E_*_"_!*E_i,"E_*_*__-!U! 1*a_#!+!*a_#"a_!*__"__͐%!!r+!######.##.###### ....# #.... #######.##.###########.##.#############.##.............##.#############.##.###########.##.########..............#..............###.####.#######.#.#######.####.###%...#......... .........#...%######.#.##.###########.##.#.######......##......#......##......###.############.#.############.###.............................#################################%c%c%c%c%cHigh score to date: %u%c By %s.r+!U! 1!-!1-Ϳ}2_!I-Ϳ}2_.#.#######.####.###%####.#######.#.#######.####%###.............................###.####.##.###########.##.####.###......##......#......##......########.#######.#.#######.#############.##.............##.#############.##.###########.##.###### ....# #.... #######.##.###########.##.#############.##.............##.#############.##.###########.##.########..............#..............###.####.#######.#.#######.####.###%...#......... .........#...%######.#.##.###########.##.#.####))))))) !9s#r!!9^#VG*!9^#V!L+r+!DMM#`i#DM+`i+ʁ#!`i)$]^#V!G*! !L+G#!DMÏ#`i#DM+`i+#!`i)_^#V!G*!@!L+É#r+!9^#V!i,V!9s#r!!9^#V))G*!9^#V^)))++!L+!9^#V#^)))!L+!9^#V##^))!L+!9^#V###^!L+r+!!9s#r!9s#r!9^#V!i,V!9s#r!9^#V!^$!!9s#r$!!9s#r$!!9s#r$!!9s#r$,$$$$$!!9^"_!V"]_!"\!"__*_>i,"H\!m!9VM!!YVM!!yVM!!VM!!VM!!VM!3!VM!T!WM!u!9WM!!YWM!!yWM!!WM!!WM!!WM!;!WM!\!XM!}!9XM!!YXM!!yXM!!XM!!XM!"!XM!C!XM!d!YM!!9YM!!YYM!!yYM!!YM! !YM!*!YM!K!YM!l!ZM!!9ZM!!YZM!!yZM!!ZM!!ZW P A C M A N Version 2.1 12/29/83 DLB Enter key for QUIT : SUSPEND :r+!! !-!=!!-! 9Ϳ!9,"_!*_a+"_%c%c%c%c%cDifficulty Level (0 - 9) :r+'!9s#rz!U! 1!9^#V! + !U!^ 1!U!9^#V!@ 1/ !U!9^#V^N 1!5+^Nr+!S #++ʤ !DMn `i#DM+`i +ʡ )))))PY9V^)))))PY9Ysh K !"_!"E_!"\!"_!"F\*H\͗+*H\,"H\!"I_ *I_#"I_+*I_+!!*I_))  #V))G*!9^#V^)))!9~#fo++!L+!9^#V#^)))!9~#fo!L+!9^#V##^#))!L+!9^#V###^!L+r+!DMã%`i#DM+*a_+`i+%!``i)e_^#Vͬ*Ý%`i+%!`i#DM+)e_^#Vͬ*%r+*_!\&!_v6!DM&`i#DM+`i+[&`i_^! ͱ+:&!G&`i_^!`i)_^#Vͬ*&%5ur+!!9s#rÄ&!9~#fo#s#r+!9^#V!9~#fo%-&!!9s#rø&!9~#fo#s#r+*_i,!9^#V%-&ç&s&r+'!9s#rz&'!9^#V^N'ͩ &"\!,r3.wh.a..!! s!! s#r!`is#r! s#r! s#r`ir+! 9^#VBK!U?0+ʅ/ +ʅ/`i#DM+sV/!`isͱ+ʭ/`i! 9~#foͱ+ʭ/!! 9^#Vr+! 9^#V!9~#fo+s#r!+0!9^#V?0DM+0`i#+s`i ͱ+0/!u`iͱ+60! 9~#foͱ+60!! 9^#Vr+! 9N#F͝1a+p0`i~#fo+s#r!K0,\0 m0m00r+! 9N#F`i~ʽ0!U`i#DM+^ 1ͱ+ʺ0!Ó0!U! 1r+! 9N#F`i~1!9^#V`i#DM+^ 1ͱ+1!+! 5+͓,! L+4+! 5+a+! L+!9f."XR!ZR6XRo&!9~++f."XR!ZR6XR|g}o|/g}/o^#V#DM!99`iq+|z2\R,:\R,}/,}}»+|+!}+|ʻ+!}|+}|?>o&zo&|+}|>o&|o&z2\R,:\R,||!,/g}/o#z/,/W{/_/,DM!>2[R))B,#}o|gZ, :[R=2[R:,}:[R=2[R:,}DM!>))y, =q,}}/o|/g#}|+û+|g}o{_,|:-|7g}o¨,{_,)½,}}o|gN#F# N#F#z,{,##^#VBK^#Vz-#y#V! ^#V`is#r! ^#V! ^#V! s#r!`in&͓,s!9^#V`i~#fo#s#r+s!a+r+!9N#F! ^#V!ͱ+ʉ5`i! s#r*V|ʩ5*V!9s#r*V^#V"V5! ^#V5!9s#rz5!! s#rz5!`in&͓,s!9^#V! s#rr+*gR|6!="eR"gR*gRDM! 9^#V*gR"gRPY%-46`i"gR!*gR*eR&-s6*gR*eR,a+! 9s#r=+6! 9^#V*eR"eR`ir+! 9^#V"iR!9!9^#V!66!*iRsr+! 9^#V*iR#"iR+s!a+r+!N9N#F!P9^#V#+^z;%ͱ+;!!''!9s#rz''&',Q&U'&'*]_^"c_!*!5+a+!9s#r!9^#V!ͱ+r'!*]_s'!9^#V! ͱ+ʒ'!*]_s'!9^#V! ͱ+ʲ'!*]_s'!9^#V!ͱ+'!*]_s'!*]_s!*o&r+!{(-!(-!(-'!9s#rz.(*_#"_+(!9^#V!rͱ+N(!9^#V!Rͱ+T(!9^#V!lͱ+t(!9^#V!Lͱ+z(W To redo the key settings, type 'R'. To change the difficulty level, type 'L'. Pressing any other key will start the game! r+*0!r+! 9N#F!9^#V!PYa+DM`i ͱ+L1! 2ͱ+L1!2r+! 9^#V͝1DMͱ+‰1! 9^#V͝1ͱ+ʍ1!͵,PY͓,r+! 9N#F! ^#V`i^#V-a2! ^!a+1!!`in&a+s`i~#1^5! ^#V! ^#V! ^'D+I2|02!32!`in&͓,s!! ^#V`is#r! s#r`i~#fo#s#r+^!a+r+!U!9^#V2r+! 9N#F!9^#V2+ʹ2!!9^#V`i2-2+2!`ir+!9N#F! ^#V`i^#V- -###,#x-#~#fo}|>?o&}|>o&{_,|g}o:-|g}o~# xO-!9]R~#j-!w-|r+!U"cR!9!9^#V!-6r+! 9^#V"cR!9!9^#V!-6r+*cR!9^#V 1r+!UDM`i~.`i DMV- .!-!9^#V#^!+ͱ+!9^#V^/|A.!D.!!9^#V͵@! s!ͱ+e.!/|v.!y.!͓,!9^#V͵@! s!ͱ+ʠ.!/|ʱ.!ô.!͓,!9^#V͵@! s!ͱ+.!!͘NN! ^5J!9/!9s!!D9s#r! !B9s#r!!@9s#rn&-ͱ+N7!!D9s#r#+^0ͱ+e7!0!B9s#r!!>9s#r#+^!0+ʴ79+ʴ7!>9^#V! i,!>9s#rp7.ͱ+8!!@9s#r#+^!0+89+8!@9^#V! i,!@9s#r7lͱ+O8#+^!:9!T9~#fos#r͟NͲN8dͱ+ʁ8!:9!T9~#fo##s#r++^#VRͲN8eͱ+¥8fͱ+¥8gͱ+8!9!T9~#fos#r*R*R8!:9!T9~#fo##s#r++^#VRͲNØ:!9!!>_Ubi,6"_*_/,r+(! 9~#fo/,r+!*-!&*!*-!9s#rzk)!(*!U͢-!#@!DMy)`i#DM+`i+ʫ)`iPR^!L+`i!L+s)!!G*!DM)`i#DM+`i8+)!9^#V͝1!L+)!!L+!!L+Getting pacman.scr. pacman.scrrError: Can't open pacman.scr. r+!9~#n*!?! 9~#foa+s#rÃ*!@! 9~#fo͓,s#r! 9^#V!L+! 9^#V!2-!L+r+!!9^#V!G*!9^#V!L+r+!! L+!! L+! 9~#3! 9^#V!a+4! 9^#V`i~#fo#s#r+s!a+r+!!9^#V4r+!UDM`iV%-w3`i DMx3W3r+!9N#F!!9s#r`i~4! ^!a+ʼ3!4!9s#r! ^B!9~#fo͓,s#r! ^!a+4*V! ^#Vs#r! ^#V"V!! s!9^#Vr+! 9N#F! ^!a+ʁ4! ^#V`i^#V,! ^#V! ^cGͱ+ʁ4!`in&͓,s!!9^#V!ͱ+ʺ4!`in&a+s!`is#r! s#r!`i~#4^5! ^#V!ͱ+5!!9! ^cGͱ+h4!9^  9͟NN:9͟NON;!9!49s#r!-!69~#fo+s#rsÐ9!9! !>9͟NN;!9!49s#rÿ:!9! !>9͟NN:9͟NN:B|;?!͕@I?!͵@ͱ+ʙ?!?!M!͇M!!@!͇M!AM!!cG! #@?`i*:S#":S+)~Rs#r`i#DM~?`i^! ͱ+?`i^! ͱ+?!`i#DM+s?ð?W>!~R*:S#@Can't open file for redirection: r+M3! 9~#=@!A@K=A:$$$.SUBr+!"\!r+!con:CON:lst:LST:prn:PRN:pun:PUN:rdr:RDR:r+!9^#V!!9^#V͵@r+!J\!!9s#r@!9~#fo#s#r!9^#V! + AnfK@=!! ="\ͱ+%I*\ͱ+@I!"\!!!LLI*\|LI!!9^#V!9^#V!$ ^!ͧL!" ="\|ʄI!!$ ^!9~#foa+!$ sz¶I`i!~#fo#s#r!r+!9N#F!I#!9~#fo+1J`i#DM+^!9s#r!9^#V! ͱ+J! !9^#V =!9^#V!9^#V =Ir+! 9^#V!+qJ! 9^#V! +qJ! 9^#V)))M\^zJ!"\͘N! 9^#V)))P\^#VBK!9^#V K! =ͱ+ʿJ!"\͘N!# =!!$ s!9!! ^#VR͊NON!$ ^RN[O5;!>9~#fo+s#r#!89~#fo+5;!B9^#V`iq+;!!69s#rR;!69~#fo#s#r!49^#V~ʒ;!69^#V!@9~#fo+ʒ;!49~#fo#s#r+^`iq+C;!D9~#;!>9~#fo+s#r#!89~#fo+;! `iq+Ü;;`iq+6r+!9N#F!9^#V`iRN!9͟NNͅP"RkR^+s! 9`iRN͟NKPͲNO;r+!9N#F!9^#V! 9͟N͊NQ=Z-#=Z-*]RDM*_Ro&Z-A=o&Z-*]R*+++*_RDM*aR!9N#F#^#Vkb6#> 6 #=l=>6#=u= : >¨= A=[ҙ=@å=a={=`w# .==ʫ==w#ì={o|g ==w#=!!|a{ !9^#V*|R!9}|>*|R"|R|!r+!!!RͧL!:o&a+Rs!?"~R!RDM!":S*:S+?`i^! ͱ+€>`i^! ͱ+ʈ>`i#DMd>`i^z?`i^!>ͱ+ʩ>!ý>`i^!<ͱ+ʜ?!`i#DM^! ͱ+>`i^! ͱ+>ý>`i`i#DM~?`i^! ͱ+ ?`i^uTo&,}2uT`ir+!9N#F!,G#!9~#fo+_G! 9^#V =`i#DM+s!ͱ+_G%Gr+! 9^#V!+ˆG! 9^#V! +ʒG!"\!! 9^#V)))J\DM!9^#V!9^#V! ^#V! ^)xU^#Vq+r+!DM!9^#V$~3Hn$&!,DM!9~#fo&-H!9^#VBK!9^#VH3H!!9^#V`i,2-!9s#rzʘH!9^#V!9^#V`iͰK!9s#rzʘH!9^#V!9~#fo,͵,PY!9^#V!͵,PYDM`i!9~#fo%-H!9^#V`i,!9^#V`iHH`i!9^#Vr+! 9N#F!!   M# L!M!}!}!9^#V#~#fox>M~>M# -M!9~#foVM#MM}!9^#V#^#V#N#FL!9^#V#^#V#N#F-M!9^#V#~#fox>M~ʨM# ÙM-M!9^#V#^#V#N#FÙM!9^#V#n~MM#M!|!9^#V#nM#MxM +~MM!9~ 2N 2N 2NGN!9~AGN[GN!}!9~aGN{2N!!9~0GN:GN2N!9~aoN{oN o&!9~AڅN[҅N o&!*VãN!*Vw#w#w#w*V~#~#~#~"U*VV+^+V+^*U"U*Vs#r#s#r*U*V*V"V"VK@D3FGBBAbcdefghijklmnoqrstuvwxyz{|}~    '/19GJKLMNOPQRSTUVYgjvy     "'/19>CDEGHIJKLMNOQRSTUVWXY[\]egjvy{*V>w#O*V~Q#OQ=ɯ<*V*V###DO&OHO"O"O&O+JO*V*V#fO*V*V#|O*V*V#‘O*V*V#¦O*V*V#»O*V~/w#O*V~?G*V^#V#~#fo))O#ODM*Vs#r#q#p*V~?W*V###~'P~w+PP7~w++P'P~# 2U!U~w#POU!U#PyP!U4!U5P!K@GIIUU   "$&><:8B^ABCDE U51Q!U~w# QOU!U#QyPPU!U#:Q*VU~#MQ*VU~#]Q!Uw#kQ> 2U!U~w#|QҧQU!U#QҧQ›Q!U5vQ*VUw#¶Q*OQ!*OQ!<*OQQ*OQQQ*OQQ*OQQQ*Vs#r#6#6*Vs#r#z R6#6*V^#Vsr32-,+*)(>0123456789abcdef_DDZ@Z@Z@K@K@K@K@K@K@K@K@Dc@\h@\m@9\r@9\w@9\|@9\@9\@9\@?\@?\\BC  pp ` pp0@0p0Pp8@p @@@ppppx00xx𠐈 PP ((00p0xx0?@~~ xxبppP (((((((((((((00@?p0xx0pp<~~~~~ۈp?@  p  ! #$%& ()*+,-. 0 2345678 :;<= ?A@ F P Z @_`abcd f hi klmnopqrstu wx z |}~ | ^d(^t( ^(^( ????  0@`@"`" @0@ @ @  JJJJJJ<c$D004T00cdc00LQ]SShhhhh @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ !"#$%&'()*+,-./0123456789:;<=>?ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_a p  @ @     !"#$%& ()*+,-. 0 2345678 :;<=>?F HI WX Z[\]^_`abcdef hi klmnopqrstu wx z{|}~ @????????08x}??@`==}}????}x80`@??}}==????22?????/m``࠰22?????/m``࠰==}}??88}}??@ 0x}?? ``}??0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/* VDP Pacman monster motion logic */ /* 29 December 1983 Version 2.1 DLB */ #define EXTERN extern #include "stdio.h" #include "pacdefs.h" #define MBEGINX 16 #define MBEGINY 10 startmonst() { if(potion) return; for(mptr = &monst[1], mcnt = 1; mcnt < MAXMONSTER + 1; mptr++, mcnt++) if(mptr->stat == START) { mptr->ypos = MBEGINY; mptr->xpos = MBEGINX; mptr->stat = RUN; mptr->dirn = (getrand(2000) < 1000) + DLEFT; Ѐ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ display(mcnt); break; } } monster(mnum) int mnum; { int i; for(i = delay; i > 0; i--) ; mptr = &monst[mnum]; tmpx = mptr->xpos; tmpy = mptr->ypos; if(mptr->stat == RUN) { switch (mptr->dirn = which(mnum, tmpx, tmpy)) { case DUP : tmpy += UPINT; break; case DDOWN : tmpy += DOWNINT; break; case DLEFT : if(tmpx <= 1) tmpx = XWRAP; else tmpx += LEFTINT; break; case DRIG@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  HT : if(tmpx >= XWRAP - 1) tmpx = 1; else tmpx += RIGHTINT; break; } mptr->xpos = tmpx; mptr->ypos = tmpy; if((tmpy == pacptr->ypos) && (tmpx == pacptr->xpos)) dieflag = dokill(mnum); offdsply(mnum); } } which(mnum, x, y) int mnum, x, y; { int movecnt; int submovecnt; int moves[8]; int submoves[8]; int nydirn, nxdirn; int goodmoves; int offx, offy; int tmpdirn; char *brdptr; mo); if(potion) { if(++killcnt == MAXMONSTER) { if(board[TRYPOS][TRXPOS] == GOLD) goldcnt--; board[TRYPOS][TRXPOS] = TREASURE; pntmap(TRSBOX, TRSLOC); treasval += TREASVAL; killcnt = 0; } for(i = 0; i < killcnt; i++) pntmap(mnstloc[i], MNSTLOC); while(i < MAXMONSTER - 1) pntmap(mnstloc[i++], BLANK); mptr = &monst[mnum]; vdpram(SATBASE + 20, WRITE); out(VDPDATA, 8 * mptr->ypos - 2); out(VDPDATA, 8 * mptr->xpos - 4); out(VDPDATA, 4 * 27 } } offx = x - pacptr->xpos; offy = y - pacptr->ypos; if(offx > 0) nxdirn = DLEFT; else if(offx < 0) nxdirn = DRIGHT; else nxdirn = DNULL; if(offy > 0) nydirn = DUP; else if(offy < 0) nydirn = DDOWN; else nydirn = DNULL; goodmoves = 0; for(submovecnt = 0; submovecnt < movecnt; submovecnt++) { if(!potion) { if((moves[submovecnt] == nydirn) || (moves[submovecnt] == nxdirn)) submoves[goodmoves/* VDP Pacman graphics and screen utilities */ /* 29 December 1983 Version 2.1 DLB */ #define EXTERN extern #include "stdio.h" #include "pacdefs.h" display(number) int number; { struct pactyp *pointer; pointer = &monst[number]; vdpram(SATBASE + 4 * number, WRITE); out(VDPDATA, 8 * pointer->ypos - 2); out(VDPDATA, 8 * pointer->xpos - 4); out(VDPDATA, 4 * pointer->name); out(VDPDATA, pointer->color); } offdsply(number) int numbvecnt = 0; brdptr = &(board[y][x]); if(((tmpdirn = monst[mnum].dirn) != DDOWN) && (*(brdptr + (BRDX * UPINT)) != WALL)) moves[movecnt++] = DUP; if((tmpdirn != DUP) && (*(brdptr + (BRDX * DOWNINT)) != WALL)) moves[movecnt++] = DDOWN; if((tmpdirn != DRIGHT) && (*(brdptr + LEFTINT) != WALL)) moves[movecnt++] = DLEFT; if((tmpdirn != DLEFT) && (*(brdptr + RIGHTINT) != WALL)) moves[movecnt++] = DRIGHT; if((getrand(400) < tempscore) || (); out(VDPDATA, BLACK); vdpram(SATBASE, WRITE); out(VDPDATA, 8 * mptr->ypos - 2); out(VDPDATA, 8 * mptr->xpos - 4); i = (killscore < 2 * KILLSCORE + 1) ? killscore / KILLSCORE : 2 + killscore / (4 * KILLSCORE); out(VDPDATA, 4 * (27 + i)); out(VDPDATA, RED); mptr->ypos = MSTARTY; mptr->xpos = MSTARTX + 2 * mnum; mptr->dirn = DNULL; mptr->stat = START; display(mnum); sleep(70); vdpram(SATBASE + 23, WRITE); out(VDPDATA, CLEAR); score += killscore; killscore *= 2;++] = moves[submovecnt]; } else { if((moves[submovecnt] != nydirn) && (moves[submovecnt] != nxdirn)) submoves[goodmoves++] = moves[submovecnt]; } } if(goodmoves > 0) return(submoves[getrand(goodmoves)]); } return(moves[getrand(movecnt)]); } #define TRYPOS 14 #define TRXPOS 16 #define TRSBOX 464 #define TRSLOC 320 #define MNSTLOC 128 int mnstloc[3] = {34, 36, 38}; dokill(mnum) int mnum; { register i; putchar(BEEPer; { int yoffset, xoffset; struct pactyp *pointer; yoffset = xoffset = 0; pointer = &monst[number]; switch(pointer->dirn) { case DUP : yoffset = 4; break; case DDOWN : yoffset = -4; break; case DLEFT : xoffset = 4; break; case DRIGHT : xoffset = -4; break; } vdpram(SATBASE + 4 * number, WRITE); out(VDPDATA, 8 * pointer->ypos - 2 + yoffset); out(VDPDATA, 8 * pointer->xpos - 4 + xoffset); out(VDPDATA, 4 * (pointer->ngetrand(score) > 600) || paccnt > 3) { if(potion) { switch (tmpdirn) { case DUP : if((*(brdptr + (BRDX * DOWNINT)) != WALL)) moves[movecnt++] = DDOWN; break; case DDOWN : if((*(brdptr + (BRDX * UPINT)) != WALL)) moves[movecnt++] = DUP; break; case DRIGHT : if((*(brdptr + LEFTINT) != WALL)) moves[movecnt++] = DLEFT; break; case DLEFT : if((*(brdptr + RIGHTINT) != WALL)) moves[movecnt++] = DRIGHT; break;  if(score >= newman) { putchar(BEEP); paccnt = min(MAXPAC, paccnt + 1); newman += NEWMAN; xpacs(); } return(FALSE); } return(TRUE); }   ame + 1)); out(VDPDATA, pointer->color); } #define PACLOC 96 int pacloc[4] = {62, 60, 58, 56}; xpacs() { register i; for(i = 0; i < paccnt - 1; i++) pntmap(pacloc[i], PACLOC); while(i < (MAXPAC - 1)) pntmap(pacloc[i++], BLANK); } int scoreloc[5] = {13, 14, 15, 16, 17}; char str[5]; update() { register i; sprintf(str,"%5u", score); for(i = 0; i < 5; i++) pntmap(scoreloc[i], (str[i] == ' ') ? BLANK : str[i] - '0'); } sleep(x) unsigned xstatic char initarray[8] = {0x02, 0x82, 0x07, 0xff, 0x03, 0x3e, 0x03, 0x0}; getscreen() { FILE *fopen(), *fp; register i; printf("Getting pacman.scr.\n"); if((fp = fopen("pacman.scr", "r")) == NULL) { fprintf(stderr, "Error: Can't open pacman.scr.\n"); exit(0); } #ifdef BIGBOARD out(SYSPORT + 1, 0xcf); out(SYSPORT + 1, 0x08); out(SYSPORT, 0x10 | in(SYSPORT)); #endif #ifdef SIO out(BSIO + 2, 0x05); out(BSIO + 2, 0x68); #endif f= DUP; else if(keyhit == down) pacptr->dirn = DDOWN; else if(keyhit == quit) over(); else if(keyhit == suspend) { while((in(KBDPORT) ^ KEYMASK) == suspend) ; goto kbdloop; } } #endif #asm public keyboard keyboard: push b mvi c,6 mvi e,0ffh call 0005h mov l,a mvi h,0 ora a pop b ret #endasm #define MULTIPLIER 25173 #define INCREMENT 13849 #define MODULUS 32767 unsigned seed; srand() { int keyhit; printf("\n\nTo redo the O + 2, 0xe8); /* VDP OFF */ } #endif ; { unsigned i, j; for(j = 0; j < x; j++) for(i = 0; i < 6 * ticks; i++) ; } #ifdef JOYSTICK poll() { int keyhit, joystick; if(keyhit = keyboard()) { switch (toupper(keyhit)) { case QUIT : over(); break; case SUSPEND : while(!(keyhit = keyboard())); break; } } olddirn = pacptr->dirn; graphics(OFF); joystick = (in(JOYPORT) & 0x0F); if(joystick == 0x07) pacptr->dirn = DRIGHT; else if(joystick == or(i = 0; i < 8; i++) { out(VDPCNTL, initarray[i]); out(VDPCNTL, 0x80 + i); } vdpram(0, WRITE); for(i = 0; i < 0x3800; i++) out(VDPDATA, getc(fp)); out(VDPCNTL, 0xc2); out(VDPCNTL, 0x81); } vdpram(addr, mode) unsigned addr; int mode; { if(mode) addr &= 0x3fff; else addr |= 0x4000; out(VDPCNTL, addr); out(VDPCNTL, addr / 0x100); } pntmap(box, pattern) unsigned box, pattern; { vdpram(PNTBASE + box, WRITE); out(VDPDATA, pattekey settings, type 'R'."); printf("\nTo change the difficulty level, type 'L'."); printf("\nPressing any other key will start the game!\n"); while(!(keyhit = keyboard())) seed++; if(keyhit == 'r' || keyhit == 'R') { instruct(); game(); } if(keyhit == 'l' || keyhit == 'L') { setlevel(); game(); } } rand() { seed = (MULTIPLIER * seed + INCREMENT); return(seed % MODULUS); } getrand(range) unsigned range; { return(rand() % range); } 0x0B) pacptr->dirn = DLEFT; else if(joystick == 0x0D) pacptr->dirn = DDOWN; else if(joystick == 0x0E) pacptr->dirn = DUP; else pacptr->dirn = DNULL; graphics(ON); } #endif #ifdef KEYBOARD poll() { int keyhit; olddirn = pacptr->dirn; kbdloop: keyhit = toupper(in(KBDPORT) ^ KEYMASK); if(keyhit == left) pacptr->dirn = DLEFT; else if(keyhit == right) pacptr->dirn = DRIGHT; else if(keyhit == up) pacptr->dirn rn); } #ifndef SIO graphics(flag) /* turns access to the VDP chip ON and OFF */ int flag; { out(SYSPORT + 1, 0xcf); /* program SYSPIO toggle bit as output */ out(SYSPORT + 1, 0x08); if(flag) out(SYSPORT, (char)(ONMASK | in(SYSPORT))); /* VDP -> ON */ else out(SYSPORT, (char)(OFFMASK & in(SYSPORT))); /* VDP -> OFF */ } #endif #ifdef SIO graphics(flag) int flag; { out(BSIO + 2, 0x05); if(flag) out(BSIO + 2, 0x68); /* VDP ON */ else out(BSI   $constant ON = 1 $constant OFF = 0 $constant CLEAR = 0 $constant BLACK = 1 $constant GREEN = 2 $constant LTGREEN = 3 $constant BLUE = 4 $constant LTBLUE = 5 $constant DKRED = 6 $constant CYAN = 7 $constant RED = 8 $constant LTRED = 9 $constant YELLOW = 10 $constant LTYELLOW = 11 $constant DKGREEN = 12 $constant MAGENTA = 13 $constant GRAY = 14 $constant WHITE = 15 $constant READ_ADDR = 1 $constant WRITE_ADDR = 0 $constant READRAM = 1 $constant WRITERAM = 0 $constant VDPDATx + h + 1) / 2 ybar = (y + v + 1) / 2 for i = y to ybar plot x + ((h - x) * (i - y)) / (v - y), i,color next for i = ybar to v plot xbar + ((h - xbar) * (i - ybar)) / (v - ybar), i,color next end of vertline procedure line ( x, y, h, v, color = integer ) if (x = h and y = v) then plot x, y, color else begin if (abs(y - v) < abs(h - x)) then begin if (x < h) then horline x, y, h, v, color else horline h, v, x, yger if (x < 0 or x > 255 or y < 0 or y > 191) then begin print "Error: Argument ("; x; ","; y; ") to "; print "plot out of range." end of if else begin coloradd = pctbase + 8 * ((x / 8) + 32 * (y / 8)) + MOD(y, 8) vdpram coloradd, WRITERAM j = mod(y, 8) j = 8 - j for i = j to 8 out VDPDATA, color next i bit = 2 ^ (7 - mod(x, 8)) pixaddr = PGTBASE + 8 * (x / 8 + 32 * (y / 8)) + mod(y, 8) vdpram pixaddr, READRAM x = inp( VDPDATA ) x = x or bit vdpram pixat",yes if yes = "Y" then graphinit rem WAKE-UP memory 0start record = 10 print chr(26) print chr$(27);chr$(61);chr$(44);chr$(72) print " L O A D I N G M E M O R Y ! !" var dis = integer dis = 0 srecord = record out vdpcntl, 082h out vdpcntl, 081h graphclear rem set memory to zeroes clearpnt var fcolor = integer out vdpcntl, BLUE out vdpcntl, colorport var i = integer fcolor = white * 10h + black vdpram pctbase, write_addr for i = 1 to pctlength out vdpdata,A = 30 : REM VDPDATA = 10 for BigBoard $constant VDPCNTL = 31 : REM VDPCNTL = 11 for BigBoard $constant SYSPORT = 1ch $constant PGTBASE = 0 $constant SGTBASE = 1800h $constant PNTBASE = 1c00h $constant SATBASE = 1f00h $constant PCTBASE = 2000h $constant PGTLENGTH = 1800h $constant SGTLENGTH = 0400h $constant PNTLENGTH = 0300h $constant SATLENGTH = 0100h $constant PCTLENGTH = 1800h $constant RAMSTART = 0 $constant RAMLENGTH = 3800h $constant COLORPORT = 87h $constant MODEPORT = 81h, color end else begin if (y < v) then vertline x, y, h, v, color else vertline h, v, x, y, color end end end of line dim char a(10) procedure graphinit var i = integer REM -- BigBoarders should include the REM -- graphics ON statement here a[0] = 002h a[1] = 0c2h a[2] = 007h a[3] = 0ffh a[4] = 003h a[5] = 03eh a[6] = 003h a[7] = 000h for i = 0 to 7 out VDPCNTL, a[i] ddr, WRITERAM out VDPDATA, x end of else end of plot procedure horline(x, y, h, v,color = integer) var xbar, ybar, i = integer xbar = (x + h + 1) / 2 ybar = (y + v + 1) / 2 for i = x to xbar plot i, ((v - y) * (i - x)) / (h - x) + y,color next for i = xbar to h plot i, ((v - ybar) * (i - xbar)) / (h - xbar) + ybar,color next end of horline procedure vertline(x, y, h, v, color = integer) var xbar, ybar, i = integer xbar = ( fcolor next i out vdpcntl, 0c2h out vdpcntl, 081h var r = real var x0,y0 = integer print chr(26) input "Radius of Shape",r input "Y Coordinates",y0 input "X Coordinates",x0 var ans = char GOTO 0start2 var title = string:32 0resrt input "Title of Chart--not to exceed 32 chracters",title gosub 0title 0resrt input "Do you wish to start again?",ans if ans = "Y" then goto 0start close #0 print "File Closed" end 0start2 var f1,f2 = real f1=6.283 rem 2 pi f2=.06283 rem 2 pi / 100 var th,tx $constant KEYPORT = 5 procedure vdpram ( address, mode = integer ) var read_mask, write_mask = integer read_mask = 03fh write_mask = 040h out VDPCNTL, address if ( mode ) then out VDPCNTL, (address / 100h) and read_mask else out VDPCNTL, (address / 100h) or write_mask end of vdpram function mod ( x, y = integer ) = integer end = x - (x / y) * y procedure plot ( x, y,color = integer ) : REM bullet-proof version var bit, pixaddr,coloradd, i, j = inte out VDPCNTL, 80h + i next end of graphinit procedure graphclear var i = integer vdpram RAMSTART, WRITE_ADDR for i = 1 to RAMLENGTH out VDPDATA, 0 next end of graphclear procedure clearpnt var i = integer vdpram PNTBASE, WRITE_ADDR for i = 0 to PNTLENGTH - 1 out VDPDATA, i next end of clearpnt var yes = char VAR p1,p2,p3,p4,p5,p6,p7,p8=integer files r(128) open #0;"TEXT.OUT" var srecord,record =integer input "Is this a COLD star  ,xn,yn=real var x,y=fixed var x1,y1=real var vx,vy=real var pt = STRING var ptx=INTEGER var n1=integer var ni= integer var ex = char x1=x0+r y1=y0 var tp=integer tx=0 tp=0 input "# of slices",ni for n1 = 1 to ni 0retry input "input %",pt tp=tp+pt if tp > 100 THEN goto 0try input "explode ??",ex IF ex = "Y" then gosub 4000 if ex = "Y" then gosub 3000 if ex # "Y" then gosub 1000 var sx,sy = integer th=tp * f2 x = x0 + r * cos(th) y = y0 - r * sin(th) fcolor = whiut vdpdata, tcolor next i vdpram textaddr, writeram out vdpdata,p1 out vdpdata,p2 out vdpdata,p3 out vdpdata,p4 out vdpdata,p5 out vdpdata,p6 out vdpdata,p7 out vdpdata,p8 return 0read if record2 = record then goto 0nxtr 0read read #0,record;p1,p2,p3,p4,p5,p6,p7,p8 0nxtr record2 = record return 0txtaddr textaddr = pgtbase + 8 * (x / 8 + 32 * (y / 8)) tcoloraddr = pctbase + 8 * (x / 8 + 32 * (y /8)) return 0title var tnum =integer var file = string file = "0123456789ABCDEFGHIJKLMNOPQRrecord tcolor = yellow * 10h + black trd = r - 9 if ex = "Y" then trd = trd + rd th = (tp - (pt / 2)) * f2 record = record + 1 x = x0 + trd * cos(th) y = y0 - trd * sin(th) gosub 0read gosub 0txtaddr gosub 0textr srecord =record return 0label tcolor = green * 10h + black var record2,num=integer dis = dis + 32 num = left$(pt,1) textaddr = pgtbase + 8 * (282 + dis) tcoloraddr = textaddr + 2000h gosub 0textr record = 38 gosub 0read textaddr = pgtbase + 8 * (283 + dis) tcolee*m)>Z>Z>Z>Z>Z >Z>Z>Z>Z>Z>Z>Z>Z>Z>Z>Z >Z!>Z">Z#>Z$>Z%>Z&>Z(>Z)>Z0>Z2>Z3>Z4>Z5>Z6>Z8>Z9>Z@>ZA>ZB>ZD>ZE>ZF>ZG>ZH>ZI$\!c>;b!c>;b!\>ZP>ZQg?*e>!d;b>ZR@*}>!d;b>ZS×**cy2}>ZT*cͨ@>ZU**c*V<*d;y2}>ZW*te * 10h + black line x0,y0,x,y,fcolor gosub 0text gosub 0label next n1 goto 0resrt 0try tp=tp-pt print "% to high retry" goto 0retry 1000 var f1x,tp2=real tp2=tp / 100 f1x = f1 * tp2 th =tx repeat begin xn = x0 + r * cos(th) yn = y0 - r * sin(th) line x1,y1,xn,yn,fcolor x1=xn y1=yn th = th + f2 end until th > f1x th = th - f2 tx = th return 4000 var rd =real rd = 10 th = (tp - (pt / 2)) * f2 vx = x0 + rd * cos(th) vy = y0 - rd * sin(th) th = (STUVWXYZ%=abcdefghijklmnopqrstuvwxyz$()<>?#+" TNUM = len(title) var strpos = integer strpos = 48 - (tnum / 2) rem center title var loop1 = integer tcolor = WHITE * 10h + black for loop1 = 1 to tnum textaddr = pgtbase + 8 * (strpos + loop1) tcoloraddr = textaddr + 2000h var letter = string:1 letter = MID$(title,loop1,1) record =instr(1,file,letter) if record = 0 then gosub 0space else gosub 0read gosub 0textr next loop1 return 0space p1 = 00h p2=00h p3=00h p4=00h p5=00h p6=00h p7=0oraddr = textaddr + 2000h gosub 0textr record = num + 1 if ptX < 10 then goto 0rcd gosub 0read textaddr = pgtbase + 8 * (284 + dis) tcoloraddr = textaddr + 2000h gosub 0textr 0rcd if ptx > 09 then num = right$(pt,1) record = num + 1 gosub 0read textaddr = pgtbase + 8 * (285 + dis) tcoloraddr = textaddr + 2000h gosub 0textr textaddr = pgtbase + 8 * (286 + dis) tcoloraddr = textaddr + 2000h record = 37 gosub 0read GOSUB 0textr return 0textr vdpram tcoloraddr, writeram for i = 0 to 7 o*c*V<*dͽ;y2}>ZX>ZYn\!d>;b!d>;b!\>Z`\*d*d*dV<*dA<)Zb\! d>;b! d>;b! d>;b!\>Zc>Zdëðõú* d*;* d*;ͽ;* d*;ͽ;* d*;ͽ;ͨ@ʉ>Zd>Ze-\Error: Argument (! T* dQT1,!/T* dQTH) to !BT>Zf-\rplot out of range.!_T<\]\>Zg>Zh>ZiÜ áæë ðõ*** d*V<** d*V!d;b>Zptp - pt) * f2 gosub 8000 x1=x y1=y th = tp * f2 gosub 8000 return 3000 rem complete the arc var f2x = real tp2 = tp / 100 f1x = f1 * tp2 f2x = f2 * tp2 FOR th = tx to f1x step f2x xn = vx + r * cos(th) yn = vy - r * sin(th) line x1,y1,xn,yn,fcolor X1=xn y1=yn next th x1 = x0 + r * cos(th) y1 = y0 - r * sin(th) tx=th return 8000 x = vx + r * cos(th) y = vy - r * sin(th) line vx,vy,x,y,fcolor return 0text var tcoloraddr,tcolor,trd,textaddr=integer ptx =pt record =s0h p8=00h return   *d *<>Zq* d*.>!d;b>Zr;*9*d)<>!d;b>Zs*d>!d\;b!\m*kv!t>a>ZtÊ** dy2}>Zu!~*>Zvôùþ*** d*.)<|->!d;b>Zw *** d*V<** d*V!d;b>Zx*dX*V<>Zyk*i͞/>! d;b>Z* d*dͽ;>! d;b>Z*dä*<>Z÷** dy2}>Z>Z>Zt\!!d>;b!d>;b!d>;b!dZq!*>Zr>Zs>Zt>Zu+*)>!z)ͲO͊`Rbd88>ZvR*P\fTEXT.OUT!]!\T1>Zw>Zx-\<\XIs this a COLD start<\=Y<\m\2Pd<\y]\>ZyY*Pd!;+͊<ͱ@>Zy >Z>Z *>!d;b>Z-\*ͫ/T<\]\>Z-\3*1ͫ/TB=*@ͫ/TQ,*Oͫ/T`H*^ͫ/T<\]\>Z-\û: L O A D I N G M E M O R Y ! !!T<\]\>Z>Z*>!d;b>Z*d>!d;b>Z;d*=d*?d*Ad3 >Z#*=d*?d*9d*;d*Ad>Z$â >Z%>Z&*;d*?d;ͨ@} >Z'*9d*;d*=d*?d*Ad~Û >Z)*=d*?d*9d*;d*Ad~>Z0>Z1>Z2>Z4ý * !z)>ͲO>Z6 >Z7>Z8>Z9>ZA * !CdHR\ * &!\>;b>ZB! * !CdHR\2 *1 &!\>;b>ZCL *J !CdHR\] *\ &!\>;b>ZDw *u !CdHR\È * &!\>;b>ZEâ * !CdHR\ó * &!\>;b>ZF * !CdHR\ >* &!\>;b>ZG * !CdZ!>Z">Z#>Z$>Z%>Z&>Z'>Z(>Z)>Z0*d,͎+bdͺD>!d;b>Z1*d,͎+>!d;b>Z2>Z3Êb>!d;b>Z4ã*>!Ue;b>Z5-\<\X# of slices<\=Y<\y\W!Qe͎U<\y]\>Z6*>!Oe\;b!\*Qe!>a>Z7>Z7-\<\Xinput %<\=Y<\y\W!dͲ]<\y]\>Z8*Ue!dR+.-5<>!Ue;b>Z9Âd*Ue*;ͨ@ʝ>Z9p>Z@-\<\Xexplode ??<\=Y<\m\2Se<\y]\>ZAY*Se!;+͊<ͱ@>ZAj>>;b!d>;b!\>Z>Z$)*d*d5<*"5<*'V<>!#d;b>ZV[*d*d5<*T5<*YV<>!%d;b>Z*d>!'d\;b!\*#dß!>a>Z*'d*d*d)<*'d*d)Z!*>Z*#d>!'d\;b!\*d!>a>Z*'d*d*%d)<*'d*#d)Z!*>Z>Z \!1d>;b!/d>;b!-d>;b!+d>;b!)d>;b!\>Z>Z*)d*-d5<*5<*V<>!3d;b>Z*+d*/d** y2}>Z(*&1*/y2=}>Z >Z{>Z>Ze*cn*ly2z}>ZÇ*Ð*y2}>Z>Zðõú**A<*5<>!d;b>Z **<>Z*>!d\;b!\*!>a>Z1*/*dy2A}>Z!%*>Z[*Yd*by2p}>Z}*{Æ*y2}>Z>Z>Z-\ó*ͫ/T<\]\>Z-\<\XRadius of Shape<\=Y<\y\W!d͈D<\y]HR\ * &!\>;b>ZH# *! !CdHR\4 *3 &!\>;b>ZPN *L >!Jd\;b!\f *d o !m >a>ZQà * *Jd!Cd+Ry2 }>ZRæ * ï * *Jd5ZS!w *>ZU>ZYq>Z`>Za * * <>Zb*>!Ld\;b!\)8*'2!0>a>ZcF*DO*My2[}>Zd!:*>Ze>Zf>Zg>ZhÎ*×*<>Ziê*>!Nd\;b!\**)<!>a>Zp**Ndy2}>ZBY*Se!;+͊<ͱ@&>ZB>ZC2Y*Se!0;+͗<ͱ@P>ZC>ZD>ZE*Ue,͎+bdE>!d;b>ZF*d,V,bd`+V,bd-`+V,>B~C>!d;b>ZG*d,V,bd`+V,bd-`+V,>BdC>!d;b>ZH**A<*5<>!d;b>ZI*d*d%bdͼ+%bdͼ+*d >ZPG>ZQ >ZR!*>ZSØ>ZT>ZT*Ue!dR+.-)<>!Ue;b>ZU-\ð% to high retry!T<\]\>ZV >ZW>ZW>ZX*Ue,͎+b5G>!_e;b>5<*5<*V<>!5d;b>Z*+d>!7d\;b!\*5d< !: >a>Z*)d*-d*)d)<*7d*+d)Z!D *>Z*5d>!7d\;b!\*/dô ! >a>Z *3d*-d*3d)<*7d*5d)Z! *>Z>Zñ \!Ad>;b!?d>;b!=d>;b!;d>;b!9d>;b!\>Z*9d*=d;*;d*?d;;ͨ@ʊ >Z*9d*;d*Adxé >Z>Z*;d,͎+*?d,͎+ͿDͶ-*=d,͎+*9d,͎+ͿDͶ-ͪ<͈@= >Z>Z *9d*=d;ͨ@ >Z!*9d*\>Z-\<\XY Coordinates<\=Y<\y\W!d͎U<\y]\>Z-\<\XX Coordinates<\=Y<\y\W!d͎U<\y]\>Z>Z ÿ>Z>Z>Z-\<\XTitle of Chart--not to exceed 32 chracters<\=Y<\y\W!dͲ]<\y]\>Z͋&>Z>Z-\<\XDo you wish to start again?<\=Y<\m\2d<\y]\>ZTY*d!R;+͊<ͱ@r>Z>Z~*|͊2>Z-\á File Closed!T<\]\>Z>Z>Z>ZVb>!d;b>Z b>!d;b>  ZYbdb_eE>![e;b>Z`bd>!d;b>Za>Zb>Zc*d,͎+bdbd-EͺD>!d;b>Zd*d,͎+bdbd-EͿD>!d;b>Zebd`+.-bd`+.-bd`+.-bd`+.-*d >Zfbd>!d;b>Zgbd>!d;b>ZhbdbdͺD>!d;b>Zibdb[e͹<͈@4>ZqbdbdͿD>!d;b>Zrbd>!d;b>Zs>Zt>Zt>Zub{>!ce;b>ZvÚ*Ue,͎+!dR+͎+b5GͿDbdE>!d;b>Zw*d,͎+bcebd-EͺD>!d;b>Zx*d# ##*#* #*#*d5!qe;b>ZI=# *qe*;#5<>!ke;b>ZP\#%*Z#>!d;b>ZQ%>ZR͋#>ZS>ZT>ZU*keÛ#*#<>ZVî#*#>!d\;b!\#*##!#>a>ZW#*#*mey2#}>ZX!#*>ZY*qe$*$<>Z`$$*"$*Rdy24$}>ZaA$*?$*Tdy2Q$}>Zb^$*\$*Vdy2n$}>Zc{$*y$*Xdy2$}>ZdØ$*$*Zdy2$}>Zeõ$*$*\dy2$}>Zf$*$*^dy2$}>Zg$*$*`dy2$}`+.-5<>!oe;b>Z*Ue,͎+!dR+͎+b5GͿDbdE>!d;b>ZZ*d*X5<>!d;b>Z*d,V,*oe,V,bd-`+V,>B~C>!d;b>Z*d,V,*oe,V,bd-`+V,>BdC>!d;b>Z%>Z%>Z ͋#>Z!*d>!d;b>Z">Z#>Z$' , 1 *% ** A<*/ 5<>!me;b>Z%>Z&^ *d*\ 5<>!d;b>Z'} !d*{ ͸/R+.->!ue;b>Z(â ç ì * * * *d5!qe;b>Z) *qe* 5<>!ke;b>Z0͋#>Z1!)*)>!Zd;b>Z)*)>!\d;b>Z7)*5)>!^d;b>ZO)*M)>!`d;b>Z>Z!e"d!e"CdɈdCdCopyright (C) 1979, By Topaz programming. All rights reserved. From here on protected by End User License.  "*"*!*>;b!*>;b"*>a!*>aͺD**>;b!*>a**>a:**Ͷ?ڙ***!*>a!*>a!**>a!*>aͿD**>;b!Ͷ?ځ*ʁ*Ù*"+"(+"9+"7+"*"*"+"%+*9+*"*7+::+,͎+bcebd-EͿD>!d;b>Zy*Ue,͎+!dR+͎+ͿDbdE>!d;b>Z͒>Z%bd,͎+>!d;b>Z%bd,͎+>!d;b>Z*Ue,͎+bdE>!d;b>Z͒>Z>Z>Z>Z>Z*Ue,͎+b5G>!_e;b>Zbdb_eE>![e;b>Zbdb_eE>!ge;b>Zbd>!d\;b!\b[ebge>Zbdbdbd-EͺD>!d;b>Zbdbdbd-EͿD>!d;b>Zbd`+.-bd`+.-bd`+.-bd`+.-*d >Zbd>!d;b>Zb>Zh>Zi>Zi*se*d;ͨ@1%>ZiÞ%>Zp>ZpD%*B%-\*d>>y3!Rd>̀8!Td>̀8!Vd>̀8!Xd>̀8!Zd>̀8!\d>̀8!^d>̀8!`d>̀8>Zq>Zq*d>!se;b>Zr>Zs>Zt%%%% %*%*%%bdͼ+*%V<*%%bdͼ+*%V!qe;b>Zu*& /&4&9& >&*(&*-&%bdͼ+*2&V<*7&%bdͼ+*<&V!ke;b>Zv>Zw>Zx>Zy>Z&H0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ%=abcdefghijklmnopqrstuvwxyz$()<>?#+!&!ye6]>Z!d&*!>!d;b>Z2%>Z3$!)!.!*"!*'!*,!*d5!qe;b>Z4[! *qe*Y!5<>!ke;b>Z5͋#>Z6Ä!*ue*!5<>!d;b>Z7ã! *Me*!;ͨ@ʾ!>Z7/">Z8%>Z9!!!*!*!*!*d5!qe;b>Z@ " *qe* "5<>!ke;b>ZA͋#>ZB>ZB;" *Me*9";ͨ@q">ZBX"!d*V"/R+.->!ue;b>ZC}"*ue*{"5<>!d;b>ZD%>ZEæ"ë"ð"*"*"*"*d5!qe;b>ZF" *qe*"5<>!ke;b>ZG͋#>ZH++5@+***7+*9+!**9+)<"!5@+++"O+!]66]&:]o!"]+ 1`+!"+!+>;b:+W2+z2+!+>a!"+!+>;b:+W:+2+!+>a!" ,!,>;b!:,,:,,:,,:,,:,,:, ,2]G!]Uw#2,!O,"_"I!O,>a!",>2_a:?,,/<2,!,>a:,=,2,!,>a>Bì,:?>B:?@!"#-|2--,<)}lg"+-!&->6#=d>!d;b>Z!Z0*>Z*d,͎+bdbd-EͺD>!d;b>Z*d,͎+bdbd-EͿD>!d;b>Zbd>!d;b>Z>Z>Zbd`+V,bd`+V,bd-`+V,>B~C>!d;b>Zbd`+V,bd`+V,bd-`+V,>BdC>!d;b>Zbd`+.-bd`+.-%bdͼ+%bdͼ+*d >Z>Z>Z>Z !dR+.->!Me;b>Z*d>!d;b>ZÆ ËÐ**A<*5<>!me;b>Zö bd`+.-*)<>!oe;b>ZY*Se!;+͊<ͱ@>Z*oebce0>!we;b>Z>Z'0$'*'*we*"'V<)<>!e;b>Z>ZQ'V'['*O'*T'A<*Y'5<>!me;b>ZÁ'*'>!e\;b!\*weÝ'!'>a>Zñ'ö'*'*'*e*e5!qe;b>Z' *qe*'5<>!ke;b>Z>Z (!d*e*(80!e6]>Z*(*((!ye!ew0>!d;b>ZM(*d*K(;ͨ@k(>Z͛(u(>Z%>Z͋#>Z!'*>Z>Z>Zç(*(>!Rd;b>Zÿ(*(>!Td;b>Z(*(>!Vd;b>Z(*(>!Xd;b>Z  ,>/!&-wFO:---:,-2,-!&->a!"l-!u->;b*v-}lg:u-N-!k-o-c-G|g}ox;b:-2-!->a!"j/!y/>aͺD-"j/!/>;b:/2/2/!q/>a!/>aͶ?9.!/>a!q/>aͿD!/>;b.!y/>a!/>aͶ?ґ.!u/>a!/>aͶ?ڃ.!m/>a!/>aͿD!/>;bÑ.!/>a!q/p.:/.:/2/:/2/2/!/>a!}/>aE!/>;b!/>a!/>aE!/>;b!/>a!/>a!/>a!/>7>*7}F7]7:8&7!_:887*7#"7{C727!]F#"7ѯx|g}oX7>!)w7 w7#=}7))҆7#j7!8Z!8Z!)8Z!]8Z!o8ZR-TYPE REAEXTENDING FILEND OF DISK DAT RANDOM RECOR R-TYPE FILE NOT OPE NO MORE DIR SPAC*WRONG TYPE FIL9q9*w9´8R92]!]R9w#=š8!]*w96]829R9w#=·889q9*w98~D9~#829~D9#=8*y9{9 w#!(3Z*%3&~#*%3!'3>ͬ9 3S-TYPE FILE CLOS"7$7 ~#F3:7:8^3ͤ4[^*7*7(6Gx†32 8:^O>͊`ʦ7~R¦7 w! |28"7"4"U4"8!$7 28~#3:V4 ;4:8(44̓4*7*76 #{3+6 +6 *7$7 w#4!W44ͤ4324ͤ4͉4W4j44̓4>28O4j44ͤ44: 8*8*8|}*84͘6!8Z:87Ͷ4*8"8*7"7*7"8:8>ʠ4/28*84Ͱ5!8Z7*7$w#»4DM*7d7}2 8zW{_|g}o4zª5" 8"7"72727:8ʂ>:'?2?2'?!!?>a>ͥ\!aS?>=!5?>aM!?4=>ͥ\!C?>aS?c=!5?>amL!?5>=:?|=/2?!J?>a5K=!!?>;b!?~=/< Җ=^~w> 2 ?{2?!(? >w#¨=+~0ʳ=:?> =>-2]:?=>:?=2?>2?> 2 ?!(?]:?==2?~#=>.: ?:>=2 ?~#>!](?:?/<6.#60= >:?G: ?G#w0>+~0:>.H>#6:?ʂ>6E#+]>/<-p# j>a> 2R?0Ox2Q?~>0w#q#6!]~™>60#6>2]ä>#~™>x2]:_>:Y>:^O>!] Y*?!!?>a!5?>amL!!?>;b2?!!?~ ? ?=w!'?~w+ >a!/>a!/>aEͿD!/>aEͿD!/>aEͿD!/>aEͿD!/>aE!/>;b:/!/w!/>a!]3|%{2/_>"/"/!]66]:/2]!]͹Z]]!"30<&"60]2]!]6]!]͹Z!]#~0{2]*60:]0260o<:60a:60!!"p0"u0"s0]2]!]6]!]͹Z!]:s0O :u0a:u0!!"0]2^!^6]!^͹Z]2]!]6]!]͹ZK!]:]G:^0:^0^00#ʿ0# ´0!"1]2]!]6]!]͹Z!]~#8"w9:^O>͊`~Rq9 ~!$"y9{9 ~#(9=_!?9~*w9^9*9w#"9^9*9~#"9*9|k9+"9!9Z!9Z READ/WRITE PAST EO+READ/WRITE SEQUENC"::^O>͊`ʟ:~SŸ: ~Rʟ:>Ww"::+~#99*:~7:~#:=_!:~*:~7:#=:*::+w#:N:!:Z*:":*:":8:*:|:+":*:w#":::!:Z::d:/2:*:0V*:::ʆ:=_: xr:!:Z S-FILE WRITWRITE ON UN-OPENED FIL,SB5* 8V7|ª5}ª5}O*7 ~B5*7q*7!:8Z*7!77!~w##O5:7!H8Z:72 8!:8Z:8ˆ5* 8}2727:7ʖ5=_*7!"7!"7*7!)8Z}5: 856Š7L6=½5L66+|5:76L65V7:86:76!]w#6]7:8&6"_:886*7#"7{7 x5*7[^w#"7}•6[^7:8x6"_:8ʊ6*7#"7{7!"7}6: 8ʱ66Š7=¥66Š7+|±6V77:86!_:86*7#"7{Š7 x6::?2?>!!?FO:?0Ѵ$5 `"?!]>;b!]>;b!]:]y?~ò?:]]!]@ʌ?*?!]]~w!]]ҥ?²?#§?!"@!]>;b!]>;b!]:]?~@:]]!]@?*@!]]~w!]]@@# @!@2@O*@y?zI@z>F@7zP@{"e@!h@_@!l@>a!!z@!&.T†@.F>Ï@>"@!];b:]>@/!|>}T@t@Y@y@@>>PD2sDBDGC>2NA!D#@A!xD#0!"F1]2]!]6]!]͹Z!M1"_"I!I1@1:S1g:P12P1!M1>a!M>͊`j1~R2Sz1!p1Z(FILE OPE"1!6"1!]66] ;:]ʠ1=_[^]*1 w#°16#º1*1!1Z*1%6#6#6###6!S-TYPE FILE NOT FOUN"r2"o2!]66] ;:]"2=_[^*r2] w# 226#6# ?2*r2!t2Z(6#>6#=b26#6!R-TYPE FILE NOT FOUN}2^M>͊`ʦ2~R:3Sʷ2!2Z)FILE CLOS"%3%~~2*%3%6 3*%3%6*%3~2=_[^*%3 TYPE FIL!;> 6 #=;!]6!];:]:>;;~##`9; @~^;#.^;?;~^;#.^;P;;~o;#c;!;͐;!;͐;!]; w#‡;~*œ;> _y{ʪ; ª;>?w#’;zW{_zW{_"<5@><<"<5@><<><"<5@><<"<5@><>p@!|'ʣ<á£<>|@"<Ͷ?><<"<Ͷ?><<><"<Ͷ?><>Q@!>2_"?2]2?2?!!?>;b:"?  @ʝAA!xDD7>'# A;A!D4C!NA5:MAAOA!DC!NA4>2MA A:NAA D<'# jA҄AB`A ʝA!DCxw!D4C^A!D:sD2BApwxA*tD"B!D>a!B>a~C*B!D>a*tD!AZ DIVISION BY ZER :}D:D!xDC!DCA!xDD7>'wG# &BxPD2sDBD>2BB> 2BGCBڂB|B!DxDC+~D=dBCZB!D4C!D:sD2BBpw:DPB*tD"B!D>a!B>a~C*B!D>a*tD:BG:B<72B!DO ~B!Dѯ7>2iK"fK!tK>;b!lK>;b2sK2{K|K!lK>a!L!lK@L!tK@L*jK|K:jKK!sKOLéK!{KOL!{KsK+²K*jK}}KK!sKOL>2jK!rK7wK+K:jKG!rK~w!lKFO:mK2rK!rK~_w!zK~Ww:iKW"jK!lKtKNG4Lx:L@L"L~;b!KM>;b:SM-M:LM-M!XM~_w!QM~Ww"YM:KM2[M!9Mw#¯L0LLjMyMҺL!EMQM w+ LúL:[MG:RMO29MxM:9MMx-M*YM!iMF0!F~+~=w!F~w+G G2FzW~ww"'H!H>;b!H>;b:H6H:H*H!H~_w!H~Ww"H:H2HZHÊG!HoH ʵG!HoH!HH+“G?yG!HH+¨GyG:Ho:HgG2H|GxGx*H*H!YH>zH!VH>a*'H!H7w H+G!HcH!H4#>w!H͙H*H!H:HzH!H>a!!RH>a*'H! DIVISION BY ZER!HcH!H~w# fH~w+qHzW~ww~2H#~H+~=w~w~w+·H ŸH6:H+~6# H>w+>H~Q}>Q/2Q}o|g"QDM:QZQ*  " |!92_]VS!T:~+ ~~C!xD~w# C CD~w+9C6C!D]C!~D]C!Dw# ]CPD~vC>wÁC>wÁCPDC>ÒCC>2sDͶC!}D:sDCpw>a*tDBD!xDD'w# CD:}DBD>!xDDCD2sD7>'w## C>C!DÛC!)Dl[!ADÛCOVERFLOW/UNDERFLOי~w> 2AD"vD"tD>!D;b>!xD;b*vD!}DD"D!DI:DW:D2D*DDw#¨D>D>2D"D!D>;b!D>;b2D2DD!D>a!̈́E!>ͼM!cM>a**M͈M*YM!?M::MͼM!9M>a!!\M>a**M!QM ~w+ pM!SM~w# M!EM 7wҙM+M`!:M~+~=w!EM ~w+«M ›M29MzW~ww"N!=O>;b!6O>;b:>ON:7ON!CO~_w!O!N>a*N!5O7wңN+ˆN!0OO!/O4#>w!/OFO!/O͇O*DO!5O:0OO!/O>a!!N>a*N!NZ DIVISION BY ZER!>~w"_]V"IзĪU IU I!]#~+>I->I %I %I+>+2K#"K>+2K~#ʋI ʋI ʋIEMI~+pI-pI+>+2K#~ʋI{_~J_#vI+6E:K+{ʙI/<2K(Jx//2 K! KFO:K+I:K2K:KI!.KI/<2K! K"K>a:K=J2K*K>amLI!'K>a! K>amL*_>;b*_͇O*_~w2KG! K>6#=4J*K~EJ#"K.UJ>2K;J! KK~#_J!KKJ!KKJ!KKJ!KKJJ2K!K>6+=˜J!KKJ:KʰJ ;J:KJ*K!KEJ.J4J: KK!KKJɯw+J0J >7_w>!Ta*_>;b> 2T>2T!Tw#'S!]2_~+DS-ES>2_#~zS0]SʁST#ES TSoS T!Tw#ESS TS T#~ʸS:TžS:_ T~0T TS!TwÉS:TSøS!T~w#S S!T5:T!T~w#S S:Tg2T!T5ͪURUR"OT]2]!]6]:]_!]6:YIT!]:^O> Y*OT"TͭTU0hT^T!]6 :U+vTw#ʂTwvTxŒT60#<62]:YʥT!]:^O> Y*T"U!U|>+2UT}/o|/g#>-2UUN#F |T,Ty/Ox/G y0w#TTDͿE!DͿE*D|(E:D"E!DE(E!DE!DD+1E*D}}QEQE!DE>2D!D7weE+YE:DG!D~w!D͙H:D2D!D~_w!D~Ww:DW"D!DDNGExҹEͿEáE4#~wE~/w+E~w+~w E"F!F>;b!F>;b:FF:FF!F~_w!F~Ww"F:F2F!F w#,F>FYFFF7F!FFw+ MF7F:FG:FO2FxF:FFxF*F!F>$G!F>a*FF*F!F:F$G!F>a!!F>a*F!F~w+ F!F~w# F!F7wG+OO!7O~w# O~w+OzW~ww0~2O#~sO+~=w~w~w+dO LO6:O+~6# ~O>w+>O~!zU;b2yU:U>+2U;U>-2U!zUU~0aU~0#CUqU:yUpU/2yU*wU.]V]kVڤUs#rͪUÏU!UUERROR IN INPUT, RE-ENTER PLEAS:_]\:_O[y]\!U[:]\W??!UUNUMBER TO LARGE/SMALy!!Vx!V(V) #V"iV>2hV7?{_zW!hV5eVyOxG#yO#xG=V*iV DM=VBK2_ +V-€V>2_`i"V! ʣVT])))0 ?ڱV_ÈV:_|/g}/o#*VDM! Hȷ707 V?_))))ûV":W:]O+W*]~ V #+WV~, ` `!H` 4 `6`!i` 4 `6y2F`>͊`(`lb2G`^#V!>`!G`>:F`O:G`ʨ`!A –``#~#^#VN#!A ´``~#`~2_#~2_#:i[!j[@[:_O>[_[>]_> _:k[=2k[@[>2k[y]\fb[[:j[/2j[fb^[^"#͒[![[:_]\ WARNING ONL:_O]\[![[:_![[[ ERRO IN LINE*_|0_|0_}0_}0_!_>w~\_!_4#[_* s#r#" * +V+^" y2^ lb:^O!H` ~H\> _<O\O> _> _2_>͊`‘\^#V>!\!\:\fb:_ʢ\_"\\:]!]a:]\:]!:]!]a:]\:]!!"]2]]!]O  ~2]!];bPtEW EW EWE~ W+EW-EW #RWV~,3W# >0RW~,+W W͊`_XO2]!]"]2]fbڽW ʽWWWXXWw,X:_ʶW~_~#yW>2]6:_>áWxyW+~_yWxyW+>_> _>_yWͽW>#_]\!]> YyW>#_]\:]\W!?Xl[:_O=Y:]\WTOO MANY CHARECTERS. MAX IS 252]!]"]2]^#V"X>!X*X*]*]~ ʪXX#"]:]2]yX!XZ>!X*X*]*]6!]"]#"]:]2]ҸX>2]øX-ASCII FIL~X#_X#~#"cb^#=bV#=a*cb*cb^#V#N#F#N#F^#V#N#F#N#F#N#F"cb__{Vbs+=bbr+=bbs+=Ub!bobb> ڂb!D !bZ%BAD CHANNEL NUMBEbÛcÛcc.ccÛcÛcÛcàcbÉcÒcÛcÛcÛcÛcÛcÛcÛcÛc_sc|b*b:rc!]2]!]6]]^#V#"2]~25]#a:5]!!"]zj]OFxʁ]yT]#6Á]#wʁ]ʁ] T]#6Á]O~ڇ]|] #6#y;b*]"]]|›]}›]ql]!]y2];b*]Ͳ]Á]F]O #6 wú]z]y]\A\2|dc2rcJc2rcJc*c|! "c__7:c½c\!cZ>2c:cc\!cZ_<2c!~ɀ&INPUT FILE REA P  From: Joe Stoneking 733 Grey Eagle Circle So. Colorado Springs, Co. 80919 (303) 599-8307 In playing around with my Color Graphics Board from Microsphere I have developed a pie chart editor. Per our phone conversation I would like anything you or any subscribers have developed. In addition, if I could get the source on the "dumpscrn" program, it woul sav m lo o tim an effort woul lik t enhanc it to blow-up screen images. I have also talked I will also continue to improve it and supply future enhancements. Keep me posted!!!!stant PIO = 0 $constant CLEAR = 0 $constant BLACK = 1 $constant GREEN = 2 $constant LTGREEN = 3 $constant BLUE = 4 $constant LTBLUE = 5 $constant DKRED = 6 $constant CYAN = 7 $constant RED = 8 $constant LTRED = 9 $constant YELLOW = 10 $constant LTYELLOW = 11 $constant DKGREEN = 12 $constant MAGENTA = 13 $constant GRAY = 14 $constant WHITE = 15 $constant READ_ADDR = 1 $constant WRITE_ADDR = 0 $constant READRAM = 1 $constant WRITERAM = 0 $constant JOY_PORT = 30 $constant JOY_CONTRO to Microsphere about developing a sound generator to enhance the color board. I think it would be a relatively low cost item and it would complete the graphics picture. Keep me posted, if you have any influence on them. Anyway littl abou th pi char program ɠ hav enclosed the "com" file, the source file, and random access file I use for character translation. The program is easy to follow. The first thing asked is if you are coming up "cold". Yes to this will initcomment *************************************************************************** ** Sketch -- a drawing program -- Written for Microsphere Inc. ** ** ** *** By DmC *** **** To Compile Enter SBASIC Sketch **** ***** ***** *****************************************,|R|!9f."r!!r26ro&!9~++f."r!!r26r in_C5 out_C5tmpC5L = 31 $constant VDPDATA = 30 : REM VDPDATA = 10 for BigBoard $constant VDPCNTL = 31 : REM VDPCNTL = 11 for BigBoard $constant SYSPORT = 1ch $constant KEYPORT = 1eh $constant BITPORT = 0Ah : REM same as sysport for BigBoard $constant BITCNTL = 0Bh : REM bitport + 1 $constant PGTBASE = 0 $constant SGTBASE = 1800h $constant PNTBASE = 1c00h $constant SATBASE = 1f00h $constant PCTBASE = 2000h $constant PGTLENGTH = 1800h $constant SGTLENGTH = 0400h $constant PNTLENGTH = 0300h $constanialize the VDP and only needs a "YES" if this is the first time you have used video ram after powering-up. The other questions are straight forward, e.g. center of the pie is the vertical and horizontal coordinates ( Y and X respectively), the radius (higher then 80 there is a good chance you will float of the screen), number of slices, and do you want to explode the slice or not. The final question is title(should not exceed 32 for obvious reasons). Please passback any enhance made .********************************** end of comment $lines $constant true = 0ffffh $constant false = 0000h $constant KNULL = 0Fh $constant KUP = 38h $constant KDOWN = 32h $constant KLEFT = 34h $constant KRIGHT = 36h $constant RIGHTUP = 39h $constant LEFTUP = 37h $constant LEFTDOWN = 31h $constant RIGHTDOWN = 33h var forgrnd, row_mode, direction, joy_stick_on, xpos, ypos, single_pass, \ altrestart, loop, xtemp, ytemp, speed, plotting, keyhit = integer $constant VDP = 0FFFFh $con  t SATLENGTH = 0100h $constant PCTLENGTH = 1800h $constant RAMSTART = 0 $constant RAMLENGTH = 3800h $constant COLORPORT = 87h comment *************************************************************************** *** VDPRAM ........... This is the standard fare for the Color Board *** *** accepts an address in video RAM and a mode (read or write) *** *** from the caller and sets up the VDP chip to perform the *** *** requested operation to the requested address procedure cursor ( x, y = integer ) print chr(27); print "="; print chr(y + 32); print chr(x + 32); end REM ***** The next procedure clears the Kaypro screen ********************* procedure page print chr(26); end REM ***** This procedure clears the requested line on the Kaypro screen *** procedure clearline ( line = integer ) cursor 0, line print chr(18h); end comment *************************************************************************** *** Thisposx, posy = integer ) vdpram SATBASE + ( sprite * 4 ), WRITERAM out VDPDATA, posy out VDPDATA, posx end of move_sprite comment *************************************************************************** *** Sleep is used to insert a delay into a loop or program ............ *** *** The larger the TIME number the longer the delay *** *************************************************************************** end of comment procedure sleep ( time = integer ) var i 8 red" print " 8 9 lt red" print " 7 ^ 9 -- STATUS -------------- 10 yellow" print " \ | / Color Mode > 11 ltyellow" print " 4<---- MOVE --->6 Joy Stick > 12 dk green" print " / | \ Pixels > 13 magenta" print " 1 v 3 Pen >  *** *************************************************************************** end of comment procedure vdpram ( address, mode = integer ) var read_mask, write_mask = integer read_mask = 03fh write_mask = 040h out VDPCNTL, address if ( mode ) then out VDPCNTL, (address / 100h) and read_mask else out VDPCNTL, (address / 100h) or write_mask end of vdpram comment *************************************************************************** * procedure sets up a menu of options for the Sketch main loop *** *************************************************************************** end of comment procedure set_up_menu page cursor 0,0 print " <<<< SKETCH >>>> Pro Color Graphics Drawing Program DmC "; cursor 0,2 print " Commands COLORS" print "d -- pen down u -- pen up 0 clear" print "j -- joy stick mode k -- key board mode , j = integer for i = 0 to time for j = 0 to 50 next j next i end of sleep comment *************************************************************************** *** This routine places the cursor to the x,y position requested by *** *** caller...... 0,0 is upper left corner of the Kaypro screen and *** *** 79,23 is lower right hand corner *** *************************************************************************** end of comment  14 gray" print " 2 Speed > 15 white" cursor 10, 23 print "Pen position x, y ===============================>"; end of set_up_menu comment *************************************************************************** *** This procedure selects between the VDP chip and the PIO chip which *** *** reside at the same port address ..... The PIO 'b' side was unused *** *** on the Kaypro but we use it for the joystick ** This procedure moves a sprite ( 0-31 ) to the position requested by *** *** caller............................................................. *** *** call by move_sprite sprite#, x-position, y-position *** *** sprite number should be 0-31 *** *** xpos and ypos should be valid moves *** *************************************************************************** end of comment procedure move_sprite ( sprite,  1 black" print "a -- set box mode z -- set row mode 2 green" print "c -- color b -- plot background pixels 3 lt green" print "s -- set repeat speed f -- plot foreground pixels 4 blue" print "m -- alternate menu r -- refresh this screen 5 lt blue" print " q -- quit sketch and return to CP/M 6 dk red" print " 7 cyan" print "    *** *************************************************************************** end of comment procedure port_select ( flag = integer ) var on_mask, off_mask, status = integer on_mask = 010h off_mask = 0efh status = inp( BITPORT ) if ( flag ) then out BITPORT, status or on_mask else out BITPORT, status and off_mask end of port_select comment *************************************************************************** *** This program gets a charactnd of comment procedure update_status cursor 42, 14 if row_mode THEN print " row "; ELSE print " box "; cursor 42, 15 if joy_stick_on THEN print " on "; ELSE print " off "; cursor 42, 16 if forgrnd THEN print " foreground"; ELSE print " background"; cursor 42, 17 if plotting THEN print " down "; ELSE print " up "; cursor 42, 18 print " "; speed;" "; end of update_status comment ************************************ *** This procedure plots individual pixels. Or it can unplot (which is *** *** the same as plotting background pixels) depending on the state of *** *** the global variable 'forgrnd' *** *************************************************************************** end of comment procedure plot ( x, y = integer ) : REM bullet-proof version var bit, pixaddr = integer bit = 2 ^ (7 - mod(x, 8)) pixaddr = PGTBASE + 8 * (x / 8 + 32 * (y / 8)) +0eh : direction = KUP 0dh : direction = KDOWN 0bh : direction = KLEFT 07h : direction = KRIGHT 06h : direction = RIGHTUP 0ah : direction = LEFTUP 05h : direction = RIGHTDOWN 09h : direction = LEFTDOWN 0fh : direction = KNULL end of case port_select VDP end of read_stick comment *************************************************************************** *** This procedure initializes the PIO to be used for the Joy Stick *** *** It need be only called once er from the keyboard by calling BDOS *** *************************************************************************** end of comment function keyboard = integer var hl, de, bc, af = integer hl = 0 de = 0ffh bc = 6 af = 0 call ( 5, hl, de, bc, af ) end = af / 100h comment *************************************************************************** *** This function does a MOD on an integer *** ******************************************************************************* *** This procedure reads the joy stick and returns a direction to *** *** Sketch........................................................ *** *************************************************************************** end of comment procedure read_stick var temp, plotstrip, plotmask, direct, plot_flag = integer plotstrip = 00Fh plotmask = 010h port_select PIO direct = inp( JOY_PORT ) REM ******* first find out if fire button is mod(y, 8) vdpram pixaddr, READ_ADDR x = inp( VDPDATA ) if forgrnd THEN x = x or bit ELSE x = x AND ( NOT BIT ) vdpram pixaddr, WRITE_ADDR out VDPDATA, x end of plot comment *************************************************************************** *** This procedure updates the status portion of the menu to reflect *** *** the present values of the tested global variables *** *************************************************************************** e *** *************************************************************************** end of comment procedure set_stick_port port_select PIO out JOY_CONTROL, 0cfh out JOY_CONTROL, 01fh out JOY_PORT, 0E0h port_select VDP end of set_stick_port comment *************************************************************************** *** This procedure updates the x,y position portion of the menu *** *********************************************************************************************** end of comment function mod ( x, y = integer ) = integer end = x - (x / y) * y REM *** This function returns lower case equivalents for upper case ******* REM *** letters ******* function tolower ( cc = char ) = char var d = char if ( cc >= 'A' and cc <= 'Z' ) then d = cc - ( 'A' - 'a' ) else d = cc end = d comment ********************************************************************** depressed ************ REM ******* and set plotting true if it is ************ temp = direct temp = temp AND plotmask if temp = 0 then plot_flag = true ELSE plot_flag = false if plot_flag <> plotting THEN begin plotting = plot_flag update_status end REM ******** now remove fire button bit ****************** direct = direct AND plotstrip REM ***************** and get direction *************************** case direct of   ******************** end of comment procedure display_position IF ( xtemp <> xpos ) or ( ytemp <> ypos ) THEN begin cursor 60, 23 print " "; cursor 60, 23 print xpos;" ";ypos;" "; xtemp = xpos ytemp = ypos end end of display_position comment *************************************************************************** *** These five procedures move the pen in the direction set by the *** *** User and kept in the global variable 'direction' direction = 'd' or direction = 'D' ) then plotting = true move_pen move_sprite 0, xpos, ypos display_position IF plotting THEN begin selecting = false scrn_box = xpos/8 + 32 * ( ypos/8 ) first_row = (scrn_box * 8) + ( MOD(ypos, 8)) end end of while cursor 30, 21 print " Select last row .."; sleep 30 plotting = false selecting = true While selecting do begin if ( joy_stick_on ) then read_stick else diws coloring of pixels at the area selected by *** *** the pen .... Two modes are supported ... In the box mode the *** *** entire screen box (8x8 pixels) is colored ... In the row mode *** *** any number of rows (8 pixels horizontally) from one to the *** *** entire screen may be colored *** *************************************************************************** end of comment procedure colors var selecting, fore_color, back_co_color; box_color = ( fore_color*16 ) + back_color scrn_box = xpos/8 + 32 * (ypos/8) vdpram PCTBASE + (8 * scrn_box), WRITERAM FOR box_row = first_row to last_row out vdpdata, box_color NEXT box_row clearline 21 end end of colors REM **** QUIT checks for exit confirmation then clears screen and boots *** procedure quit var answer = char clearline 20 clearline 21 cursor 10, 20 input3 "Quit (y or n)? "; answer; IF answer = 'y' then begin  *** *************************************************************************** end of comment procedure go_up IF ypos > 0 THEN ypos = ypos - 1 direction = KUP end of go_up procedure go_down IF ypos < 191 THEN ypos = ypos + 1 direction = KDOWN end of go_down procedure go_left IF xpos > 0 THEN xpos = xpos - 1 direction = KLEFT end of go_left procedure go_right IF xpos < 255 THEN xpos = xpos + 1 direction = KRIGHT end of go_right procedure move_pen case direction rection = keyboard() if ( direction = 'd' or direction = 'D' ) then plotting = true move_pen move_sprite 0, xpos, ypos display_position IF plotting THEN begin selecting = false scrn_box = xpos/8 + 32 * ( ypos/8 ) last_row = (scrn_box * 8) + ( MOD(ypos, 8)) end end of while clearline 20 clearline 21 plotting = false update_status cursor 0, 21 input3 "Foreground color please ? "; fore_color; input3 " Background collor, scrn_box, box_color, \ last_box, box_row, first_row, last_row = integer REM **** First do ROW mode code ******************************************* IF row_mode THEN begin cursor 8,20 print "Select by moving pen to row and putting pen down"; cursor 8,21 print "Select first row .."; plotting = false update_status selecting = true While selecting do begin IF ( joy_stick_on ) then read_stick else direction = keyboard() if (  page stop end end of quit comment *************************************************************************** *** Set Speed sets the length of delay in the joystick reading loop and *** *** thereby sets joystick speed .................................... *** *************************************************************************** end of comment procedure set_speed clearline 20 clearline 21 cursor 8, 21 input3 "New repeat speed ?"; speed; clearline 21 update_status of KUP: go_up KDOWN: go_down KRIGHT: go_right KLEFT: go_left LEFTUP: begin go_up go_left end RIGHTUP: begin go_up go_right end LEFTDOWN: begin go_down go_left end RIGHTDOWN: begin go_down go_right end end of case end of move_pen REM ****** end of pen moving procedures *********************************** comment *************************************************************************** *** This procedure alloor please ? "; back_color; box_color = (fore_color*16) + back_color vdpram PCTBASE + first_row, WRITERAM for box_row = first_row to last_row out VDPDATA, box_color next box_row clearline 21 end of if REM ***** Now do BOX mode ************************************************* IF ( NOT row_mode ) then begin first_row = 1 last_row = 8 cursor 0, 21 input3 "Foreground color please ? "; fore_color input3 " Background color please ? "; back  end of set_speed REM *** This procedure sets up the joy stick port as a bit port *********** REM ****** Needs to run only once ************************************** procedure set_bit_port out SYSPORT + 1, 0cfh out SYSPORT + 1, 008h end of set_bit_port comment *************************************************************************** *** MAIN_LOOP used to be the main loop of this program. Well, the menu *** *** kept getting more and more crowded. I needed another menu and I **os end if ( joy_stick_on ) then begin read_stick move_pen if plotting then plot xpos, ypos sleep speed IF direction = KNULL then display_position end if single_pass then loop = false end of while end of main_loop comment *************************************************************************** *** This is the other menu. It is entered first when running sketch and *** *** provides initialization choices, total screen coloring, fetching of *** *** abegin row_mode = true update_status end 'f' : begin forgrnd = true update_status end 'b' : begin forgrnd = false update_status end 'r' : begin set_up_menu update_status xtemp = 0 display_position end 'm' : begin loop = false altrestart = true end KUP : begin go_up display_position end KDOWN : begin go_down display_position end KLEFT : begin go_left  3 lt green" print " 4 blue" print " 5 lt blue" print " 6 dk red" print " 7 cyan" print " 8 red" print " 9* *** I wanted to enter it first. But I also wanted to do some other *** *** things that were defined in this program. The only solution *** *** (since sbasic does not support forward declarations was to put *** *** the old main loop in a procedure that would be called by a new *** *** main loop and then this procedure could be entered at any time *** *************************************************************************** end of comment procedure main_loop While  blank pad (SKETCH.SCR) etc....................................... *** *** There is still plenty of room on the menu for ??................... *** *************************************************************************** end of comment procedure alternate_menu var key = integer comment *************************************************************************** *** The first sub procedure prints the menu on the screen.............. *** ******************************************************* display_position end KRIGHT : begin go_right display_position end RIGHTDOWN: BEGIN GO_RIGHT GO_DOWN display_position END RIGHTUP: BEGIN GO_UP GO_RIGHT display_position END LEFTUP: BEGIN GO_UP GO_LEFT display_position END LEFTDOWN: BEGIN GO_left GO_DOWN display_position END 'Q' : quit 'q' : quit end of case move_sprite 0,xpos,ypos if plotting then plot xpos, yp lt red" print " 10 yellow" print " 11 ltyellow" print " 12 dk green" print " 13 magenta" print " 14 gray" print " 15 white" cursor 5, 23 print "Menu ( loop ) do begin IF ( NOT joy_stick_on ) OR ( direction = KNULL ) THEN begin keyhit = keyboard () case keyhit of 'j' : begin joy_stick_on = true update_status end 'k' : begin joy_stick_on = false update_status end 'u' : begin plotting = false update_status end 'd' : begin plotting = true update_status end 'c' : colors 's' : set_speed 'a' : begin row_mode = false update_status end 'z' : ******************** end of comment procedure set_up_alt page cursor 0,0 print " <<<< SKETCH >>>> Pro Color Graphics Drawing Program DmC "; cursor 0,2 print "--------------------- OPTIONS ---------------------- COLORS" print "e -- enter SKETCH r -- return to SKETCH 0 clear" print "b -- set backplane color p -- change pen color 1 black" print "g -- get blank sketch pad c -- color entire pad 2 green" print "n -- refresh this menu  Selection ===================================="; cursor 70, 23 end of set_up_alt REM *** This procedure is the portal for reentering the other menu ******** procedure reenter set_up_menu update_status xtemp = 0 display_position single_pass = false loop = true main_loop end of reenter REM *** This procedure sets up the globals for the first entry to the ***** REM *** other menu **************** procedure start_sketch xpos = 121 yclearline 23 cursor 5, 23 print "Menu Selection ====================================="; cursor 70, 23 end end of get_blank_pad REM *** This is the main loop of the alternate menu procedure ************* set_bit_port set_stick_port altrestart = true WHILE true DO begin IF altrestart THEN begin set_up_alt altrestart = false end key = keyboard () key = tolower ( key ) case key of 'r' : reenter 'e' : start_sketch 'b' : backplane 'c' : color_like ? "; pen_color; vdpram SATBASE + 3, WRITERAM out VDPDATA, pen_color clearline 20 cursor 70, 23 end of color_pen REM *** Initialize VDP and load SKETCH.SCR into the VDP RAM *************** procedure get_blank_pad var j = integer var c, reply = char procedure init dim char a(10) var i = integer port_select VDP a[0] = 002h a[1] = 0c2h a[2] = 007h a[3] = 0ffh a[4] = 003h a[5] = 03eh a[6] = 003h a[7] = 000h for i = 0 to 7 out VDPCNTL, a[i] K}lJlJ*&0>A>AA C!I>G!I>GCM?*K>!IG^@*\>!IGo*m*Iy2}*I7ʶÏ*Ø*I*7*I͉6y2}û**I*7*I~6y2}X C!I>G!I>G!I>GC **I* 66$*"00*.*Iy2@}F*D*Iy2V} C!I>GCp*n>!I CGC*IÌ!>GÙ*>!I CGCñ2*ú!>G!0!0J C!I>G!I>GC%C*͝12;pos = 94 plotting = false joy_stick_on = false forgrnd = true row_mode = false speed = 6 reenter end of start_sketch REM *** Color the backplane *********************************************** procedure backplane var bcolor = integer cursor 10, 20 input3 " Backplane Color ? "; bcolor; out VDPCNTL, bcolor out VDPCNTL, COLORPORT clearline 20 cursor 70, 23 end of backplane REM *** Set foreground and background pixel colors for entire screen ****** procedure color_pad vpad 'p' : color_pen 'g' : get_blank_pad 'n' : set_up_alt end of case end of while end of alternate_menu comment *************************************************************************** *** The main loop of the program is an endless loop that allows the *** *** User to switch between the two menus at any time since both *** *** menus are in procedures *** ************************************************************************* out VDPCNTL, 80h + i next i end of init cursor 8, 20 input3 "Confirm..... Get blank pad (y or n) ?"; reply; clearline 20 IF ( reply = 'y' or reply = 'Y' ) THEN begin clearline 23 cursor 5, 23 print "Loading SKETCH.SCR Please wait .................."; init out VDPCNTL, 082h out VDPCNTL, 081h files S(1) open #0, "SKETCH.SCR" vdpram RAMSTART, WRITERAM for j = 1 to RAMLENGTH read #0; c out VDPDATA, c next j out VDPCNTL, 0C2h out VDPCNTL, 081h %C =!2;%C *I*6͝12;%C8 *I*66͝12;c%CX*V͝12;Ü C!I>GC{*y*I%CÑ*͝12;Ð Mç*ð*%C@ <<<< SKETCH >>>> Pro Color Graphics Drawing Program DmC !2; * *%CjC Commands COLORS!&2;4CUC%CEd -- pen down u -- pen up 0 clear!2;4CUC%C"Ej -- joy stick mode k -- key bar forcolor, baccolor, color_byte, k = integer cursor 5, 20 input3 "Foreground color ?"; forcolor; input3 " Background color ?"; baccolor; color_byte = (forcolor * 16) + baccolor vdpram PCTBASE, WRITERAM for k = 1 to PCTLENGTH out VDPDATA, color_byte next k clearline 20 cursor 70, 23 end of color_pad REM *** Change color of pen (in case it is same as graphics image) ******** procedure color_pen var pen_color = integer cursor 5, 20 input3 " What color pen would you ** end of comment While ( true ) do begin alternate_menu end of while   oard mode 1 black!2;4CUC%C~Ea -- set box mode z -- set row mode 2 green!82;4CUC%CEc -- color b -- plot background pixels 3 lt green!2;4CUC%C6Es -- set repeat speed f -- plot foreground pixels 4 blue!2;4CUC%CÒEm -- alternate menu r -- refresh this screen 5 lt blue!L2;4CUC%CE q -- quit sketch and return to CP/M 6 dk red!2;4CUC% !2;***%C. !,2;*Ik;C !?2;ÛS*Q>!JGd*b>!JGu*s͓ Á*͐1>!JG*J>!JG*J*J͉6>!JGô*J*67*>! JG*>! JG* J*I67 * J>!IGͪ *J*J͉6>!JG*J>͝C+*)̓7I:8*8>!IGÉ>͝CS *Q̓7qb2*`>!IGÉ>͝C{ *y̓7™Ê4*>!IGÉ>͝Cã*̓7ò6*>!IGÉ>͝C*̓79*>!IGÉ>͝C *̓7  * *I*I͉6y2 }ø ) *' >!IG: *8 >!IGK *I >!IG\ *Z >!IGm *k *I*I*I*I" "I"I"I"I Cé *I* 7C C!I>G!I>GC C*I*I*I7*I66Cy C!I>GC A Z*I* &F7ͷ7*I* &S7ͷ7͉67a < A@ a*I*; &*? &66>!IGm *I>!IG C*ICç C!I>G!I>GCÙ Þ ã * * *I* ͻ 6V1>!IG    * * *I* 7* *I* g pen down!2;**%CCSelect first row ..!/2;O*M>!IGͪ c*a>! JG* J7j*I7ʉNÔ$ >!IGØdÜD*I*&6*I*&6~67*>!IG**I*I *I7g*>! JG  *I*7* *I*766>!JGAF*J*?6*I*Dͻ 6>!JGoo*mx*v%Câ Select last row ..!2;î*[ú*>!IG*>! JG* J7*I7N$ >!IGdCJE 7 cyan!2;4CUC%CæE 8 red!`2;4CUC%CE 8 9 lt red!2;4CUC%C^E 7 ^ 9 -- STATUS -------------- 10 yellow!2;4CUC%CúE \ | / Color Mode > 11 ltyellow!t2;4CUC%C E 4<---- MOVE --->6 Joy Stick > 7*>!IGÉ>͝C*̓79*3*(>!IGÉ>͝CC *A̓7aR1*P>!IGÉ>͝Ck*i̓7‰z*x>!IGÉ>CÓ*͓ ã*͓ ï*ø*y2}**y2}**y2}*͓ ù*I*I6*I*I6~67ʸ/<*-8*6%CV !H2;b<*`k*i%C*Ik;Å !2;*Ik;Ù !2;*I>!IG*I>!IG*I*ͭ67*I*6>!IG8*>!IG?76666*I* ͻ 6>!IG*I/ *- 0; *9 ͐1>!IG*I7j *I*I~6>!IGÀ *I*I͔6͉6>!IG*IÉ * 0Õ * *Iy2 }Kï ** ø * *I7 %C row ! 2;%C box ! 2;****I7?%C5 on !*2;Z%CS off !H2;_**]h*f*I7ʘ%CÎ foreground!2;ô%Cí background!2;ù****I7%C down !2;%C up D*I*&6*I*&6~678,**>!IG@*>*I*I *I7a*_>! JGrw |*I*p7*u*I*z766>!JGéî*J*6*I*ͻ 6>!JG*f*f*>!IGͪ * * %C4C͎?Foreground color please ? 4Cy>! J3<%C4C͎? Background color please ? 4Cy>!J3<É* J*6*J6>!JGè **J6ø*0*J>!J CGC*J!>G**Jy2}!0 12 dk green!2;4CUC%Cr E / | \ Pixels > 13 magenta!, 2;4CUC%C E 1 v 3 Pen > 14 gray! 2;4CUC%C* E 2 Speed > 15 white! 2;4CUC< *: E *C %CÈ 2Pen position x, y ===============================>!U 2;! C!I>GCè * >!IGù * >!IG * ͐1>!IG*I7 * *I*I~6y2 }*I*͞67-*I*6>!IG22*0>!IGÂG*I*Eͭ67p]*I*[6>!IGu4*s>!IGÊ*I*͞67ʳà*I*6>!IGø6*>!IGî*I>͝C8*̓7ͼè>͝C2*̓7è>͝C 6*̓7ͅè>͝C$4*"̓74Bè>͝C>7*<̓7QͼBè>͝C[9*Y̓7nͼͅè>͝Cx1*v̓7‹Bè>͝CÕ3*̓7¨ͅè>CË*I7 **%C 0Select by moving pen to row and puttin  *f*I͔67ʊ*>!JG.*,>!JG?*=H*F%C4C͎?Foreground color please ? 4Cy>! J3<%C4C͎? Background color please ? 4Cy>!J3<* J*6*J6>!JG *I*7**I*766>!JG ***J667*50*J>!J CGC*JZ!X>Gg*e*Jy2w}!b0Ã*fÓ*fß*fë *ô*%C4C͎?Quit (y or n)? 4CeC2Jy*J*&c77M 6 dk red!"2;4CUC%Ci#E 7 cyan!##2;4CUC%C#E 8 red!#2;4CUC%C!$E 9 lt red!#2;4CUC%C}$E 10 yellow!7$2;4CUC%C$E 11 ltyellow!$2;4CUC%C5%E 7 ͎&>͝Cq*&̓7&͎&>C0*.*I*I*I7T*I*I| *I7ʙN*I7y*I*I| *I[Å*I*67ʙ *I7ʴè*>!IG0&M**%C @ <<<< SKETCH >>>> Pro Color Graphics Drawing Program DmC !2;, ** 5 *3 %CÉ C--------------------- OPTIONS ---------------------- COLORS!E 2;4CUC%C Ee -- enter SKETCH r -- return to SKETCH 0 clear! 2;4CUC%CA!Eb --G)*)*'Jy2)}!)0#)*!)f/)F*-)8)*6))H)*F)Q)*O)%C4C͎? What color pen would you like ? 4Cy>!+J3<Ù)Þ)*)*)6î)*)0ú)*)*+Jy2)})*)f)F*))*)V.å+) *)!30>7 ** *͓ ***!3J͏: C(**'*&C>G;**9*!3J͏: CL**K*&C>G_**]*!3J͏: Cp**o*&C>GÃ***!3J͏: CÔ***&C>Gç***!3J͏: Cø***&C>G***!3J͏: C*>**&C>G***!3J͏: C+l*f*f*(*&%C4C͎?New repeat speed ?4Cy>!I3!IG*I>͝Cj*&̓7&*>!IGͪ &>͝C/k*.&̓7R@*>>!IGͪ &>͝C[u*Z&̓7~l*j>!IGͪ &>͝CÇd*&̓7ªØ*>!IGͪ &>͝Cóc*&̓7ͱ&>͝Cs*&̓7&>͝Ca*&̓7 *> 12 dk green!$2;4CUC%CÑ%E 13 magenta!K%2;4CUC%C%E 14 gray!%2;4CUC%CI&E 15 white!&2;4CUC[&*Y&d&*b&%Cè&3Menu Selection ====================================!t&2;ô&F*&ý&*&'ͪ͟ &*&>!IG &*&>!IG&*&>! set backplane color p -- change pen color 1 black! 2;4CUC%CÝ!Eg -- get blank sketch pad c -- color entire pad 2 green!W!2;4CUC%C!En -- refresh this menu 3 lt green!!2;4CUC%CU"E 4 blue!"2;4CUC%Cñ"E 5 lt blue!k"2;4CUC%C #E **&C>G+*+!3J͏: C$+*#+&C>G7+*5+>!:J CGCO+*M+X+!V+>Ge+*c+*:J!3Jr:y2{+}Á+*+Ê+*+*:J6y2+}!`+0ê+*+ó+*+%C4C͎?Confirm..... Get blank pad (y or n) ?4CeC21J+*+f,y ,Y*1J*,&c7ͷ7*1J* ,&c7ͷ7~67U.8,*6,fD,*B,M,*K,%CÒ,4Loading SKETCH.SCR Please wait ..................!],2;!-J͕A)!-JyAó,*,ü,*,y2,},*,,*,y2,},*,!ͳ<>!307!IGͪ &>͝Cz*&̓78&*$>!IGͪ &>͝CAf*@&̓7dR*P>!IGͪ &>͝Cmb*l&̓7~*|>!IGͪ &>͝CÙr*&̓7ͪ͟ ð*>!IG &>͝Cm*&̓7*>!IG*>!IG&>͝C8*̓7ͼ &>͝C#2*!̓76 &>͝C@4*>̓7SB &>͝C]6*[̓7pͅ &>͝Cz3*x̓7ͅ &>͝CÚ9*̓7°ͼͅ &>͝Cú7*̓7ͼB &>͝C1*̓7B &>͝CQ*&IGÆ''y*'>!IG!'^*'>!IG2'*0'>!IGC'*A'>!IGT'*R'>!IGe'*c'>!IGv'*t'>!IG&(Î' *'×'*'%C4C͎? Backplane Color ? 4Cy>!!J3<'*'*!Jy2'}'*''*'y2'}(*(f(F* ((*(@)'(*%(0(*.(%C4C͎?Foreground color ?4Cy>!#J3<%C4C͎? Background color ?4Cy>!%J3<å(*#J*(6*%J6>!'JG( *((*(0(*(>!)J CGC(*((!(>  _FS4-*- C'- SKETCH.SCR!-Cͪ16-*4-?-*=-0K-*I->!-J CGCc-8*a-l-!j->Gy-*w-%C!/J>>4Í-*-*/Jy2-}!t-0é-*-ò-*-y2-}-*--*-y2-}-*-f-*--*-%C9.4Menu Selection =====================================!.2;E.F*C.N.*L.o͞a.*_.>!IGr.*p.7 0*I7ʬ.K!J͕A;K!JyAà.*.>!IG$ >!JG*J >!JG*J>͝C.r*.&̓7.K!J͕A&K!JyA0>͝C/e7'7ͳ<;7*$7"$7'7<;7!||;7xŷ;7|/g}/o#y>|7z7y>|7|7z7y>|7z7y>|7>ͫ7z7z>77zž7{!©7!&.Tµ7.F"77!7!!|>}T7t7Y7y77>>"@:" :B ":)* :8*:":"8 9^#V"::~#.8::*":#=$:R8N#F#ͳ<=D8|`8}`8!: :O:!:o8ͳ<":::":s#r#=ʖ8q#p#ͳ<=‡8:!:£8y2 :: :O:!:²8ͳ<":*:":D9::o&)E*::w#8:!:8!:B:8*:*:6#z8*:#3>Ww"33+~# 3)3* 4~k3~#53=_!3~* 4~k3#=53*33+w#J3͂3! 4A*4"4*4"4l3*4|S3+"4*4w#"4:4!4A: 4˜3/2 4*4<*4:3ʺ3=_3 xæ3!24A S-FILE WRITWRITE ON UN-OPENED FIL,S TYPE FIL"5:EO>_Fa5~Sa5 ~Wa5>Rw"l5n5*~#k4œ442D!D4w#=‚4!D*5Dõ4=_!g5~*54w#=¨4*l5n5*w#½44!5A*5"5*5"5*5|4+"5*5~#"5:5!5A*5<*= DM2E`i"=! H=T])))0 ?V=_-=:E|/g}/o#*=DM! Hȷ707 r=?_))))`="=:DO=*D~ ¢= #=Ô=~,= = =E~=+=-= #=â=~,=# >0=~,===~,=# "Dy2DO>_F?O2D!D"D2DHb> b>ʋ>x>ʩ>>k>w>:E[>~E~#>>2D6:E>F>x>+~E>x>+>E> E>E>b>>#EUC!D>Ͱ?>>#EUC:D>!>dB:EO?:D>TOO MANY CHARECTERS. MAX IS*.&̓7$/K!J͕A 'K!JyA0>͝C-/b*,/&̓7Q/K!J͕A͉'K!JyA0>͝CZ/c*Y/&̓7~/K!J͕A"(K!JyA0>͝CÇ/p*/&̓7«/K!J͕AC)K!JyA0>͝Cô/g*/&̓7/K!J͕A)K!JyA0>͝C/n*/&̓70K!J͕A;K!JyA0>Cm.0*07#0ͻ0!jJ"_J!kJ"3J_J3JCopyright (C) 1979, By Topaz programming. All rights reserved. From here on protected by End User License.  "01"C1"T1"R1" 1"1"#":9::^#V++^#V#":^#V":":++r+sD9*:##":9*:":9::*:*:|>V9}>[9/2:}o|g":DM::¡9*  " |!9M6#T5 R5!5AREAD PAST EOREAD ON UN-OPENED FIL,S TYPE FIL!s6> 6 #=5!D6!Dr6:D:>5~##`5 @~6#.66~6#.66{6~06#$6!s6Q6!{6Q6!Dr6 w#H6~*]6> _y{k6 k6>?w#S6zW{_zW{_z/W{/_"6̓7>66"6̓7>66>6"6̓7>66"6̓7>6>͟7!}o|g}o|g"$ 252D!D"D2D^#V"?>!,?*?*D*D~ O?j?#"D:D2D?!?A>!]?*?*D*D6!D"D#"D:D2D]?>2D]?-ASCII FIL~ʜ?#EÎ?#~#yUC9C2?~?2?#~?E!?5?û?:?9CyUC!?B?2X@"@@ͣD2[@![@D!\@"Y@![@^A:E!*Y@@~#.,-$*^+/&!\I@#~:EO~E#@41"@1*T1*"*R1:U1F1̓731* 1*R1*T1!**T16"!̓7#1#131z1!zʎ1zW{_}1ͳM>_F1~RX2S1!1A(FILE OPE"@2!6"=2!D6D5:D1=_5ED*@2 w#26#2*@2!B2A*@2%6#6#6###6!S-TYPE FILE NOT FOUN"2"2!D6D5:Dx2=_5E*2D w# ˆ26#6# •2*2!2A(6#>6#=¸26#6!R-TYPE FILE NOT FOUN" 4:EO>_F3~S3 ~R:/;G:1;*-;!;ASUBSCRIPT OUT OF BOUND"i;ͣD2D!DD:D_!D6:X@c;!D:EO>Ͱ?*i;";;-<0‚;x;!D6 :,<+ʐ;w#ʜ;wÐ;x¦;60#<62D:X@ʿ;!D:EO>Ͱ?*;" +2,<;}/o|/g#>-2,<"<N#F |;,;y/Ox/G y0w#<;* <D͂=D=I??!2 =7?{_zW! =5 =yOxG#yO#xG!  N# 6~qA#gA6#qAy/Ox/G*  " ~# xŠA* w# x™A" $!9z!AA! *** OUT OF MEMORY **^"#:AA͊B:EUC**A2aB~2E#~2E#:aB!bB8B:EO>[EͻB>]E> E:cB=2cB8B>2cByUCHSB:bB/2bBHVB^"#͊B!}BB:EUC WARNING ONL:EOUCB!BB:E!BBͻB ERRO IN LINE*E|0E|0E}0E}0E!E>w~CE!E"H^#=GV#=G*H*H"H__{Hs+=Hr+=Hs+=H!IHHgH> 0H!D !6HA%BAD CHANNEL NUMBEÑHIIIIHHHIIIIIINIÈH7I@IIIIIIIIIIIIIIIII_!I|ªH*H: I¼HʱH2 IæH!HHÒH: IH!I|H*H7>|of the 15 color selections. The backplane is larger than the pattern plane so it creates a border if it is a different color than the pattern plane. It is also the color that will show a clear pixel. p - change pen color Changes the color of the sprite used as a pen by SKETCH. g - get blank sketch pad Loads the file SKETCH.SCR into the color board RAM. If used it over writes any other graphics information in the RAM. Also init- ializes the board so GRPHIN4#BE* s#r#" * +V+^" y2E H:EO!F ~@C> E<GCO> E> E2E>_F‰C^#V>!C!C:CH:EʚCE"CC:D!DG:D½C:D!:D!DG:DC:D!!"C2DC! DO  ~2D!DG!ͣD2D!DDC"DzDDOFx[Dy.D#6[D#w[D[D .D#6[DO~aDVD #6#yG*D"DD|uD}uDqFD!Dy2DG*D͌D[DFDO #6 wÔDzʭD Sketch Documentation..................................................... Sketch is an interactive drawing program that consists of two menus. Each menu has a different set of options. The first menu entered is used for major screen manipulation and is called the alternate menu. The second menu is entered from the first and is the main menu called SKETCH. The alternate menu may be entered from the main menu as well. Alternate Menu Commands...............................................I2 IH2 IH*5I|! "5I__7:IkI\!IA>2I:IŠI\!IA_<2I!~ɀ&INPUT FILE REAtIT does not need to be run before entering sketch. c - color entire pad Sets foreground and background pixels for every screen box on the graphics display. n - refresh this menu Clears screen and reprints menu. Sometimes the run time error checking in SBASIC messes up the menu. Main Menu Commands......................................................... COMMAND USE and MEANING d - pen down Start plotting pixels. When the pen is down pixels are plotted wherev E E!F 4 E6E!>F 4 E6y2F>_FEH2F^#V!F!F>:FO:F}F!A kFF#~#^#VN#!A ‰FF~#–F... COMMAND USE and MEANING e - enter SKETCH Sets up global variables for the main menu. This should only be used the first time the main menu is entered. After this the r option should be used to re-enter SKETCH. r - return to SKETCH Allows access to the main menu without re-initializing the globals. Status and conditions in SKETCH upon return are the same as when alternate menu was entered. b - set backplane color Sets the color of the backplane to any "  er the pen is moved. Foreground or background pixels may be plotted depending on the Pixels status line u - pen up Stop plotting pixels. Allows the pen to be moved from one part of the screen to another without plotting points as you move. j - joy stick mode Sets the joy stick as the direction input device. Requires the joystick modification described in issue #15 of Micro Cornucopia. Sets Joy Stick status line to 'on'. k - keyboard mode Sets the key boarespondance. Any graphics image created with sketch can be operated on by any of the other graphics editors or utilities. Appendix A Row Numbering 0,0 255,0 _________________ ____________ | row 0 | row 8 | | row 248 | | row 1 | row 9 | | row 249 | | row 2 | row 10|  line. f - plot foreground pixels Sets the type of pixels to be plotted when the pen is down to foreground (i.e. they will be the foreground color). b - plot background pixels Sets the type of pixels to be plotted when the pen is down to background. This is used as an un-plotting function in most applications. s - set repeat speed Sets the amount of delay in the joy stick read loop so that the speed of joystick movement can be regulated. Bigger number means d as the direction input device. The numeric keypad is used to move the pen around the screen as described by the MOVE indicator on your menu. Sets Joy Stick status line to 'off'. a - set box mode Sets the color mode to box. In this mode the colors can be set for the screen box that the pen is pointing to. A screen box is 8 pixels by 8 pixels. z - set row mode Sets the color mode to row. In this mode the colors can be set for the first row that the pen se | row 250 | | row 3 | row 11| | row 251 | | row 4 | row 12| | row 252 | | row 5 | row 13| | row 253 | | row 6 | row 14| | row 254 | | row 7 | row 15| >.........................................> | row 255 | ----------------- ------------ ^ ^ slower movement. m - alternate menu Dumps you back into the alternate menu. r - refresh this screen Clears screen and reprints menu. q - quit Exit to CP/M. Quit asks you to confirm before exit is granted. Other Notes Sketch may be used to plot and unplot any graphics image that is loaded into the color board with GETSCRN if the image has the one to one correspondance between bytes in the pattern generator table and the pattern name table (see manual). SKETCH.SCR has such a corrlects through the last row the pen selects. There are eight 8 pixel wide rows in each screen box the next row being in the next screen box to the right and down. See appendix a for row numbering scheme. Note the selection process will only work if the last row is a greater number than the first row. Otherwise only one row is colored. c - color Sets background and foreground pixel colors either by row or by screen box depending on the Color Mode status screen box 32 | ------ screen box 2 --------------- screen box 1 screen box 33- | | row 256| <----| | row 257| | row 258| | row 259| | row 260| | row 261| | row 262| | row 263| v : : : v 0,191 255,191 #  $  @??00000??10 ```p8p   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~+  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~%   @@@ ppp px P CIRCLE PRNDJZoOVERLAYBCOM6qrstBASICLIBRELuvwxyz{|}~BASICLIBRELDpp ` p p0@  pp 0p 0P p 8@p &   xx p p  @  @ p  ppp p p p HpH xx HHH P P P P   pp ph  xp '   xp p  @@  @  @ p PPPPP @ ` ` P   @ xp( @@