מחשב ביתי · 1982
Dragon 32, בדפדפן
Dragon 32 יצא בוויילס ב-1982: 32 קילובייט זיכרון, מקלדת שמתחברת לטלוויזיה, וקלטת קסטה במקום כונן. כאן הוא נבנה מחדש בדפדפן, בסגנון של אז: מכניסים מחסנית ומשחקים, טוענים משחקים מהקלטת, או כותבים BASIC בעצמכם. כל מה שכאן כתבנו מאפס; אין כאן קוד או ROM מקוריים של Dragon.
זה המדריך. המחשב עצמו נפתח בכפתור "חזרה למחשב". אפשר גם להתקין אותו כאפליקציה: בטלפון "הוספה למסך הבית", ובמחשב סמל ההתקנה בשורת הכתובת.
איך מתחילים
- מדליקים. במחשב הוא נדלק לבד. בטלפון לוחצים "הדלקת המחשב".
- מקלידים באנגלית ולוחצים Enter. למשל PRINT "HELLO". בטלפון מקלידים במקלדת של ה-Dragon שעל המסך (לשונית "מקלדת"), ואפשר לעבור למקלדת של הטלפון.
- לא רוצים להקליד? בלשונית "פקודות" יש פקודות מוכנות: בוחרים, ולוחצים "לנסות עכשיו".
- לשחק: בלשונית "מדף" יש מחסניות (משחקי פעולה) וקלטות (משחקי BASIC).
- לעצור: הכפתור "עצירה" על המסך, או Esc. אחרי ציור, "חזרה למסך הטקסט".
- תקועים? בלשונית "עוזר" (במחשב: בצד ימין) שואלים בעברית.
המחשב
חריץ המחסניות: משחקי פעולה עם גרפיקה. בחרו מחסנית, והיא תיכנס למחשב
מדף הקלטות: בחרו קלטת, והיא תיטען ותתחיל
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 הזה. |
🧪 ניסוי: המחשב האמיתי. בנפרד מהאפליקציה, אנחנו בונים Dragon 32 מדומה ברמת השבב (האמולטור XRoar), עם BASIC חדש שכתבנו בשפת המכונה של ה-6809, במקום ה-ROM המוגן. לנסות את המחשב האמיתי, ולספר לנו מה שונה מהמקור.
אז והיום: מה הייתי כותב היום ל-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$, וכמה פקודות בשורה אחת עם נקודתיים. ואם תקלידו את השם שלי, הוא יענה.