מחשב ביתי · 1982

Dragon 32, בדפדפן

Dragon 32 יצא בוויילס ב-1982: 32 קילובייט זיכרון, מקלדת שמתחברת לטלוויזיה, וקלטת קסטה במקום כונן. כאן הוא נבנה מחדש בדפדפן, בסגנון של אז: מכניסים מחסנית ומשחקים, טוענים משחקים מהקלטת, או כותבים BASIC בעצמכם. כל מה שכאן כתבנו מאפס; אין כאן קוד או ROM מקוריים של Dragon.

איך מתחילים

  1. מדליקים. במחשב הוא נדלק לבד. בטלפון לוחצים "הדלקת המחשב".
  2. מקלידים באנגלית ולוחצים Enter. למשל PRINT "HELLO". בטלפון מקלידים במקלדת של ה-Dragon שעל המסך (לשונית "מקלדת"), ואפשר לעבור למקלדת של הטלפון.
  3. לא רוצים להקליד? בלשונית "פקודות" יש פקודות מוכנות: בוחרים, ולוחצים "לנסות עכשיו".
  4. לשחק: בלשונית "מדף" יש מחסניות (משחקי פעולה) וקלטות (משחקי BASIC).
  5. לעצור: הכפתור "עצירה" על המסך, או Esc. אחרי ציור, "חזרה למסך הטקסט".
  6. תקועים? בלשונית "עוזר" (במחשב: בצד ימין) שואלים בעברית.

המחשב


      
    

חריץ המחסניות: משחקי פעולה עם גרפיקה. בחרו מחסנית, והיא תיכנס למחשב

מדף הקלטות: בחרו קלטת, והיא תיטען ותתחיל

TYPE-IN PROGRAM · 1983

DRAGON DERBY

תוכנית מעיתון. בשנות ה-80 עיתוני מחשבים הדפיסו תוכניות שלמות, וילדים ישבו שעות והקלידו אותן אות אחרי אות. מספיקה טעות אחת קטנה, והמחשב עונה ?SN ERROR. זו תוכנית מקורית שלנו, בסגנון של אז: מרוץ סוסים קטן. מהמרים על סוס, ורואים מי מגיע ראשון.

איך: במחשב מקלידים AUTO, ואחריו את השורות (בלי המספרים, AUTO מוסיף אותם). בסוף RUN. או שהמחשב יקליד בשבילכם.

הצג את הקוד (18 שורות)
10 CLS 6
20 PRINT "DRAGON DERBY"
30 INPUT "BET ON HORSE (1-3)";B
40 X=0:Y=0:Z=0
50 X=X+RND(3):Y=Y+RND(3):Z=Z+RND(3)
60 CLS 6
70 FOR I=1 TO X:PRINT "-";:NEXT I:PRINT "1"
80 FOR I=1 TO Y:PRINT "-";:NEXT I:PRINT "2"
90 FOR I=1 TO Z:PRINT "-";:NEXT I:PRINT "3"
100 SOUND 60+X+Y+Z,1
110 FOR T=1 TO 150:NEXT T
120 IF X<25 AND Y<25 AND Z<25 THEN 50
130 W=1:M=X
140 IF Y>M THEN W=2:M=Y
150 IF Z>M THEN W=3
160 PRINT "HORSE";W;"WINS!"
170 IF W=B THEN PRINT "YOU WIN!":FOR I=1 TO 5:SOUND 150+I*20,1:NEXT I:END
180 PRINT "BETTER LUCK NEXT TIME"

שימו לב לשורה 110: FOR T=1 TO 150:NEXT T היא לולאה שלא עושה כלום, רק סופרת. ככה עשו "המתנה" אז, כדי שהסוסים לא ירוצו מהר מדי.

אפשר גם להעתיק, לחזור למחשב ולהדביק (⌘V או Ctrl+V): המחשב מקליד את כל השורות לבד.

מה כאן מקורי?

שום דבר מה-Dragon המקורי: אין כאן ה-ROM של Microsoft ו-Dragon Data, ואין משחקים מ-1982. כל חלק נכתב מחדש:

חלקבמה נכתבמה זה
ה-BASIC (המחשב עצמו)JavaScriptמפרש שכתבנו, שמתנהג כמו ה-BASIC של ה-Dragon ברוב הדברים. לא זהה לו בכל פרט.
המסך, המקלדת והצלילJavaScriptציור מחדש בדפדפן, בצבעים ובגופן של אז.
4 המחסניותJavaScriptמשחקים חדשים שכתבנו ברוח המשחקים של אז. במקור, מחסניות נכתבו בשפת מכונה.
6 הקלטות ותוכנית העיתוןBASICתוכניות שכתבנו, בשפה של ה-Dragon. אחרי הטעינה LIST מראה את הקוד.
העוזרClaudeבינה מלאכותית של היום, שמכירה את ה-BASIC הזה.
אז והיום: מה הייתי כותב היום ל-Claude

אז היה צריך לדעת בדיוק איך לכתוב כל שורה. היום מספיק להסביר מה רוצים.

10 PRINT "GONEN ";
20 GOTO 10

"תמלא לי את המסך בשם שלי, שוב ושוב, עד שאגיד די."

10 FOR I=1 TO 12
20 SOUND I*20,2
30 NEXT I

"תשמיע לי סולם של צלילים, מהנמוך לגבוה."

30 N=RND(100):T=0
40 INPUT "YOUR GUESS";G
50 T=T+1
60 IF G<N THEN PRINT "HIGHER!":GOTO 40
70 IF G>N THEN PRINT "LOWER!":GOTO 40
80 PRINT "YES! IT WAS";N

"תבנה לי משחק קטן: המחשב בוחר מספר בין 1 ל-100, אני מנחש, והוא אומר לי אם לעלות או לרדת. בסוף תגיד לי בכמה ניסיונות הצלחתי."

היכל התהילה

השיאים בכל מחסנית, עם שלוש אותיות של שם, כמו במכונות הארקייד. בעולם: עשרת השיאים של כל השחקנים. בבית: חמשת השיאים שלכם, בדפדפן הזה. נשמרים רק שלוש האותיות והניקוד, בלי שום פרט אישי.

המדריך הקצר

קלטות ומחסניות. ב-Dragon היו שתי דרכים לטעון משחק. קלטת הייתה איטית: תוכנית BASIC שנטענה לאט, לפעמים כמה דקות, ואפשר היה לראות את הקוד שלה. מחסנית נכנסה לחריץ בצד המחשב, ועבדה מיד. המשחקים בה נכתבו בשפת מכונה, ולכן רצו חלק, עם גרפיקה ותנועה. המחסניות כאן הן משחקים חדשים שכתבנו ברוח המשחקים של אז.

במחסנית משחקים עם החצים ועם רווח, ובטלפון עם הכפתורים שמתחת למסך. Esc או "הוצאת המחסנית" מחזירים ל-BASIC.

ב-BASIC מקלידים באנגלית, ושולחים כל שורה עם Enter. זה התקציר של ספר ההוראות:

הבסיס

PRINT "HELLO"
מדפיס על המסך. גם חשבון: PRINT 7*6.
10 PRINT "HI"
שורה עם מספר לא רצה מיד. היא נשמרת בתוכנית, לפי סדר המספרים.
RUN
מריץ את התוכנית.
LIST
מציג את התוכנית. אחרי שטוענים משחק, אפשר לראות את הקוד שלו.
AUTO
ממספר בשבילכם את השורות: 10, 20, 30. שורה ריקה מסיימת.
NEW
מוחק את התוכנית ומתחיל מחדש.
BREAK / Esc
עוצר תוכנית שרצה. יש גם כפתור "עצירה" על המסך.
CLS 3
מנקה את המסך וצובע אותו. מספר מ-0 עד 8.
SOUND 100,4
צפצוף: גובה הצליל, ואז האורך.
INKEY$
המקש שנלחץ עכשיו, בלי לחכות ל-Enter. ככה כתבו משחקים: IF INKEY$="" THEN 100 מחכה למקש.

קלטות

CLOAD "LANDER"
טוען משחק מהקלטת. בלי שם נטען "נחש את המספר".
CSAVE "SHIR"
שומר את התוכנית שכתבתם על "קלטת" בדפדפן הזה. היא מופיעה על מדף הקלטות, ו-CLOAD "SHIR" מחזיר אותה גם מחר. עד 8 אותיות או ספרות באנגלית, ועד 6 קלטות.
✕
הכפתור הקטן על "הקלטת שלי" מוחק קלטת ששמרתם. לחיצה ראשונה שואלת "למחוק?", ורק השנייה מוחקת.

תוכניות

IF A>5 THEN 100 ELSE 200
אם התנאי נכון, עושים את מה שאחרי THEN. אחרת את מה שאחרי ELSE.
GOSUB 100 … RETURN
קופץ לשורה 100, ו-RETURN חוזר לפקודה שאחרי ה-GOSUB. ככה כותבים חלק שמשתמשים בו כמה פעמים.
ON X GOTO 100,200
אם X הוא 1 קופץ ל-100, אם 2 ל-200. עובד גם עם GOSUB.
DIM A(20)
רשימה (מערך) של 21 מספרים: A(0) עד A(20). עם $ זו רשימה של מילים, ואפשר גם טבלה: DIM B(5,5).
READ A$ : DATA DOG,CAT
READ לוקח את הערך הבא משורות ה-DATA בתוכנית, לפי הסדר. RESTORE חוזר להתחלה.
INPUT "AGE";A
שואל ומחכה לתשובה. INPUT A,B מבקש שני ערכים עם פסיק ביניהם, ואם חסר אחד המחשב שואל שוב עם ??.
LINE INPUT N$
מקבל שורה שלמה, גם עם פסיקים.
DEF FNA(X)=X*X
נוסחה משלכם. אחר כך PRINT FNA(3) מדפיס 9.
STOP … CONT
STOP עוצר את התוכנית באמצע, ואפשר לבדוק משתנים עם PRINT. CONT ממשיך מאותו מקום (גם אחרי BREAK).
TRON / TROFF
TRON מראה בסוגריים כל שורה שרצה, כדי למצוא איפה התוכנית טועה. TROFF מכבה.
CLEAR
מאפס את כל המשתנים והרשימות.

לתקן ולסדר

EDIT 20
מעלה את שורה 20 לשורת ההקלדה. מתקנים ולוחצים Enter.
DEL 20-50
מוחק את השורות 20 עד 50. גם DEL 20 לשורה אחת.
RENUM
ממספר מחדש: 10, 20, 30, ומתקן את כל ה-GOTO וה-GOSUB שמצביעים על השורות.

מילים ומספרים

LEFT$ MID$ RIGHT$
חלקים ממילה. מההתחלה: LEFT$("DRAGON",3) = DRA. מהאמצע: MID$("DRAGON",2,3) = RAG. מהסוף: RIGHT$("DRAGON",2) = ON.
LEN INSTR ASC CHR$
אורך המילה: LEN("DOG") = 3. איפה מופיעה אות: INSTR("HELLO","L") = 3. קוד של אות: ASC("A") = 65, ובחזרה: CHR$(65) = A.
STR$ VAL HEX$ STRING$
מספר למילה: STR$(5). מילה למספר: VAL("12") = 12. בבסיס 16: HEX$(255) = FF. אות שחוזרת: STRING$(5,"*") = *****.
INT RND ABS SGN FIX
מספר אקראי מ-1 עד 6: RND(6). בלי מה שאחרי הנקודה: INT ו-FIX. בלי מינוס: ABS. הסימן של מספר: SGN (1, 0 או מינוס 1).
SQR SIN COS TAN ATN LOG EXP
שורש, טריגונומטריה (ברדיאנים), לוגריתם וחזקה.
TIMER
שעון שסופר 50 פעמים בשנייה. TIMER=0 מאפס אותו, טוב למדידת זמן במשחק.
PRINT TAB(10);"X"
מתחיל לכתוב בעמודה 10.
PRINT USING "##.##";A
מספרים מיושרים: # ספרה, $ סימן דולר, , פסיקים של אלפים. ! האות הראשונה של מילה.
PRINT @ 240,"HI"
כותב במקום מסוים במסך. כל שורה היא 32 מקומות: 0 בפינה למעלה, 32 בתחילת השורה השנייה.

גרפיקה וצליל

PMODE 3,1 : SCREEN 1,0
עובר למסך הגרפי (4 צבעים). PCLS 3 צובע את כולו בכחול.
PMODE 0 … PMODE 4
רמות פירוט: 4 הכי חד עם 2 צבעים, 3 עם 4 צבעים, ו-0 עד 2 גסים יותר.
COLOR 4
בוחר צבע לציור: 1 ירוק, 2 צהוב, 3 כחול, 4 אדום. עם SCREEN 1,1: בז', תכלת, סגול, כתום.
PSET(128,96)
נקודה. המסך הוא 256 על 192, ו-(0,0) בפינה השמאלית העליונה.
LINE(0,0)-(255,191),PSET
קו. עם ,B בסוף: מלבן, ועם ,BF: מלבן מלא.
CIRCLE(128,96),40
עיגול: מרכז ורדיוס.
PAINT(128,96),3,4
צובע צורה סגורה: מהנקודה החוצה, בכחול (3), עד שנתקלים בקו אדום (4). ככה ממלאים עיגול.
DRAW "U20R20D20L20"
מצייר בתנועות: U למעלה, D למטה, L שמאלה, R ימינה, ו-E F G H באלכסון. BM10,20 קופץ למקום בלי לצייר, C2 מחליף צבע, S8 מגדיל פי 2.
PPOINT(10,10)
איזה צבע יש בנקודה. כך משחק יודע שנגעתם בקיר.
GET(0,0)-(15,15),S
שומר ריבוע מהציור ברשימה S (קודם DIM S(10)). PUT(100,50)-(115,65),S מדביק אותו במקום אחר. ככה מזיזים דמות.
PCOPY 1 TO 2
מעתיק עמוד גרפי שלם. PMODE 3,2 מציג את עמוד 2.
SET(10,5,3)
ריבוע צבעוני גס על מסך הטקסט (64 על 30). RESET מכבה אותו, ו-POINT(10,5) בודק איזה צבע יש שם.
JOYSTK(0) JOYSTK(1)
הג'ויסטיק: מ-0 עד 63, למעלה-למטה וימינה-שמאלה. במחשב עם החצים, ובטלפון בנגיעה במסך.
PLAY "CDEFGAB"
מנגן תווים. # אחרי תו מעלה חצי טון, O3 אוקטבה גבוהה יותר, L8 תווים קצרים, T6 קצב מהיר יותר, P4 הפסקה.

מותר גם: INPUT, IF … THEN, GOTO, FOR … NEXT, משתנים כמו A או N$, וכמה פקודות בשורה אחת עם נקודתיים. ואם תקלידו את השם שלי, הוא יענה.