– איך מספרים ואותיות הופכים לצליל ותמונה במעבד

אפשר בגדול לחשוב על כל טווח כתובות כעל “טבלה של פקודות/הגדרות” — אבל לא פקודות של המעבד עצמו, אלא רגיסטרים של חומרה שמגיבים לכתיבה/קריאה. המעבד לא “מבין” סאונד או גרפיקה; הוא פשוט כותב מספר בינארי לכתובת, והרכיב שמחובר לכתובת הזאת מפרש אותו פיזית.

1- Memory-Mapped I/O – העיקרון
LDA #$0F STA COLUP0 ; כתיבת 00001111 לכתובת $06 (צבע לשחקן 0)
- הערך (ביטים) יוצא על קווי הדאטה.
- הכתובת יוצאת על קווי הכתובת.
- אות כתיבה מפעיל את הרכיב (TIA/RIOT), והוא שומר/מעדכן התנהגות.
2- איך מספרים הופכים לסאונד?
AUDC0/AUDC1
– סוג גל (ריבוע/רעש וכו').AUDF0/AUDF1
– תדר (Pitch) ע"י חלוקת שעון.AUDV0/AUDV1
– ווליום 0–15.
LDA #%00000110 ; סוג גל STA AUDC0 LDA #$1A ; תדר STA AUDF0 LDA #$0F ; ווליום STA AUDV0
3- איך מספרים הופכים לגרפיקה?
COLUP0/COLUP1/COLUPF/COLUBK
– צבעים ובהירויות.GRP0/GRP1
– 8 ביטים = 8 פיקסלים של שורת ספרייט.PF0/PF1/PF2
– דפוסי ה־Playfield בכל שורה.RESPx + HMPx/HMOVE
– מיקום אופקי מדויק בקרן הסריקה.
4- מיפוי כתובות מרכזי (VCS)
- $00–$7F – TIA: רישומי גרפיקה/סאונד + דגלי התנגשויות.
- $80–$FF – RIOT/PIA: RAM של 128 בתים + קלט/פלט (ג׳ויסטיק, מתגים) + טיימר.
- $F000–$FFFF – ROM: קוד המשחק וטבלאות נתונים.
דוגמת וקטורים וקוד אתחול
; --- ROM --- ORG $F000 Reset: SEI CLD LDX #$FF TXS ; init TIA/PIA... MainLoop: JMP MainLoop ORG $FFFC .word Reset ; Reset Vector .word Reset ; IRQ/BRK
5- “צ׳יט־שיט” קצר ל-TIA
כתובת | שם | שימוש |
---|---|---|
$00 | VSYNC | התחלת/סיום סנכרון אנכי (3 שורות) |
$01 | VBLANK | השתקת תצוגה/קלט בזמן VBLANK |
$02 | WSYNC | המתנה עד סוף שורת סריקה |
$06 | COLUP0 | צבע/בהירות לשחקן 0 |
$15 | AUDC0 | סוג גל לערוץ 0 |
$17 | AUDF0 | תדר לערוץ 0 |
$19 | AUDV0 | עוצמה 0–15 |
$1B | GRP0 | 8 ביטים = 8 פיקסלים |
$10 | RESP0 | מיקום אופקי מיידי |
$2A | HMOVE | החלת היסטים אופקיים |
$2C | CXCLR | איפוס דגלי התנגשויות |
6- RIOT/PIA (RAM + I/O + טיימר)
כתובת | שם | שימוש |
---|---|---|
$80–$FF | RAM | משתני משחק |
$280↔$80 | SWCHA | קלט ג׳ויסטיקים |
$282 | SWCHB | RESET/SELECT/DIFF/BW |
$284 | INTIM | קריאת טיימר |
$296 | TIM64T | אתחול טיימר בקצב 64 |
דוגמת קריאת ג׳ויסטיק + טיימר
LDA SWCHA AND #%01100000 ; 0=לחוץ (active low) CMP #%01100000 BEQ .no_lr .no_lr LDA #$2A STA TIM64T .wait LDA INTIM BNE .wait
7- אז מה זה כל הפינים במעבד?
בקצרה: קווי כתובת (Address), קווי דאטה (Data), קווי בקרה (Read/Write, Clock, Reset). הכתיבה/קריאה לרגיסטרים גורמת לשינוי במתחים בקווים המחוברים לרכיבי TIA/RIOT — וזה מה שמוליד את הסאונד, הפיקסלים והקלט בזמן אמת.
דיאגרמה: קוד → בינארי → אות חשמלי → פלט
- Assembly → מקודד לאופקודים (בינארי).
- בינארי → יוצא על קווי הכתובת/דאטה + אות כתיבה/קריאה.
- הרכיב (TIA/RIOT) מתרגם לבניית אותות (שמע/וידאו/קלט).
- פלט: רמקול מנגן, תמונה נסרקת למסך, קלט מתקבל.
שפת Assembly – מבוא היסטורי
אסמבלי נולדה כדי להחליף כתיבה ישירה בבינארי/כרטיסים מנוקבים ומתגים. אחריה הופיעו שפות עיליות (Fortran, C, Pascal) שבסוף מתורגמות לאסמבלי.
דוגמת קוד קצרה
; טעינה, חיבור, ושמירה LDA #10 ADC #5 STA $0200
LDA #10
– טוען 10 ל־AADC #5
– מוסיף 5 ל־ASTA $0200
– שומר לזיכרון
🔧 סימולציה חיה
מצב סימולציה
שלב נוכחי: LDA
רגיסטר A: 0
זיכרון [כתובת $0200]: עדיין ריק
✨ אפשר להרחיב את הסימולציה לפקודות נוספות, קלט מהג׳ויסטיק וטיימרים.