Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
z9001:software:chip_8 [2021/02/19 08:14] – [Grafik und Sound] volkerpz9001:software:chip_8 [2022/08/02 10:15] (aktuell) – [Interna] volkerp
Zeile 1: Zeile 1:
 +
 ====== CHIP-8 ====== ====== CHIP-8 ======
  
-CHIP8 ist ein Interpreter für die [[homecomputer:chip8|]]-Sprache [[wp>CHIP-8]].+CHIP8 ist ein Interpreter für die Programmiersprache [[homecomputer:chip8|]], s.a. [[wp>CHIP-8]].
 Entwickelt habe ich diesen Interpreter 2013 für das [[sonstiges:kctreffen2013|]]. Entwickelt habe ich diesen Interpreter 2013 für das [[sonstiges:kctreffen2013|]].
 +
 +2021 hab ich den alten Quellcode hervorgeholt und um die überfälligen Teile Laden/Speichern/Editieren ergänzt.
  
 ===== Speicherbelegung ===== ===== Speicherbelegung =====
Zeile 12: Zeile 15:
 | OS-Kommando | CHIP8 | | OS-Kommando | CHIP8 |
  
 +===== Download =====
 +
 +  * {{ :z9001:software:chip8.zip |}} Quellcode, Stand 22.2.2021
 +  * {{ :z9001:software:chip8-bin.zip |}} ausführbare Datei + Chip-8-Programme (für USB/Diskette)
 +  * {{sonstiges:chip8.pdf|Vortrag}} Mein Vortrag zum KC-Treffen 2013
  
 +Hinweis: Die Timer für Sound und Delay arbeiten offenbar nicht korrekt.
 ===== Anleitung ===== ===== Anleitung =====
  
Zeile 19: Zeile 28:
 {{:z9001:software:chip8-1.png|}} {{:z9001:software:chip8-1.png|}}
  
-Mit STOP (Strg-C) wird der CHIP8-Interpreter beendet.+Mit STOP (Strg-C) wird das Programm beendet.
  
 LIST startet den HEX-Editor. LIST startet den HEX-Editor.
Zeile 36: Zeile 45:
 Als Dateiendung wird automatisch CH8 vergeben. Als Dateiendung wird automatisch CH8 vergeben.
  
-Hinweis: Bei der Arbeit mit USB oder Diskette werden die Programme OHNE den typischen KC-Vorblock gespeichert. Die CH8-Dateien sind hier  +Hinweis: Bei der Arbeit mit USB oder Diskette werden die Programme OHNE den typischen KC-Vorblock gespeichert. Die CH8-Dateien sind hier reine Binärdateien und kompatibel zu den im Internet verfügbaren CHIP-8-Programmen.
-reine Binärdateien und kompatibel zu den im Internet verfügbaren CHIP-8-Programmen. +
  
 RUN startet das aktuelle Programm. Im Fenster laufen die CHIP8-Programme auf einem 64x32 Pixel großen "Bildschirm". RUN startet das aktuelle Programm. Im Fenster laufen die CHIP8-Programme auf einem 64x32 Pixel großen "Bildschirm".
Zeile 45: Zeile 52:
  
   - IBM-Logo\\ Anzeige des Logos, Ende mit ESC   - IBM-Logo\\ Anzeige des Logos, Ende mit ESC
-  - Breakout\\ der Schläger wird links-rechts mit <4>-<6> bewegt.+  - Breakout (Paul Vervalin, David Winter)\\ der Schläger wird links-rechts mit <4>-<6> bewegt.
   - Panzer (s. [[sonstiges:kctreffen2013|]])\\ Panzer bewegen hoch <2> - rechts <6>  - runter <8> - links <4>   - Panzer (s. [[sonstiges:kctreffen2013|]])\\ Panzer bewegen hoch <2> - rechts <6>  - runter <8> - links <4>
-  - Pong\\ linker Spieler hoch <1> runter <4> rechter Spieler hoch <C> runter <D>+  - Pong (Paul Vervalin, David Winter)\\ linker Spieler hoch <1> runter <4> rechter Spieler hoch <C> runter <D>
  
 {{:z9001:software:chip8-3.png|}} {{:z9001:software:chip8-3.png|}}
Zeile 67: Zeile 74:
 +---+---+---+---+ +---+---+---+---+
 </code> </code>
 +
 +
 +===== Interna =====
 +
 +Der eigentliche CHIP-8-Maschinencode-Interpreter basiert auf dem Programm Chip83 v0.1 by Joe Wingbermuehle; orig. für TI-83 in Z80-Code geschrieben.
 +Load/Save setzt die BDOS-Erweiterung von USB-OS bzw. Disk-OS (USBX bzw. DOSX) voraus. Ohne diese Erweiterung wird nur ein BOS-Error ausgegeben.
  
 ===== Links ===== ===== Links =====
  
-  * http://www.chip8.com Die größte Sammlung an Programmen und Infos zu CHIP-8, Handbuch des COSMAC VIP +z.B. auf http://bitsavers.informatik.uni-stuttgart.de/components/rca/cosmac/ zu finden: 
-  * http://mattmik.com/documents.html die komplette Sammlung der VIPER-Magazine für die COSMAC VIP-Computer.+ 
 +  * **COSMAC_VIP_Instruction_Manual_1978.pdf**   Handbuch zum VIP, enthält Einführung in CHIP-8 und 20 Programme für CHIP-8 
 +    - VIP Kaleidoscope  
 +    - VIP Video Display Drawing Game 
 +    - VIP Wipe Off  
 +    - VIP Space Intercept  
 +    - VIP 4096-Bit Picture  
 +    - VIP Figure Shooting at Moving Target  
 +    - VIP Tick-Tack-Toe Game  
 +    - VIP Spooky Spot 
 +    - VIP Jackpot  
 +    - VIP Snake Race 
 +    - VIP Card Matching Game 
 +    - VIP Armored Vehicle Clash  
 +    - VIP Hi-Lo  
 +    - VIP Hex Reflex  
 +    - VIP Dot-Dash  
 +    - VIP A-Mazing  
 +    - VIP Deduce  
 +    - VIP Shooting Stars  
 +    - VIP Strike-9  
 +    - VIP Card Game (like the well-known acey-ducey) 
 +  * **VP-710_RCA_COSMAC_VIP_Game_Manual_Dec78.pdf**  enthält weitere 16 Programme für CHIP-8 
 +    - VIP Pinball (Andrew Modla) 
 +    - VIP Message Center (Andrew Modla) 
 +    - VIP Bingo (Andrew Modla) 
 +    - VIP Blackjack (Andrew Modla) 
 +    - VIP Slide (Joyce Weisbecker) 
 +    - VIP Reversi (Philip Baltzer) 
 +    - VIP Bowling (Gooitzen van der Wal) 
 +    - VIP Deflection (John Fort) 
 +    VIP Animal Race (Brian Astle) 
 +    - VIP Most Dangerous Game (Peter Maruhnic) 
 +    - VIP Sum Fun (Joyce Weisbecker) 
 +    - VIP Sequence Shoot (Joyce Weisbecker) 
 +    - VIP Biorhythm (Jef Winsor) 
 +    - VIP Programmable Space fighters (Jef Winsor) 
 +    - VIP Lunar Lander 
 +    - VIP Blockout (Steve Houk)
  
 ===== CHIP-8 ===== ===== CHIP-8 =====
  
-Details zur Programmiersprache s. [[homecomputer:chip8|]].+Details zur Programmiersprache s. [[homecomputer:chip8|]] und [[homecomputer:chip8:referenz|]].
  
 | virtueller Prozessor | 16 Register V0..VF\\ Index-/Adressregister I\\  (Stackregister SP)\\ (Program Counter PC) \\ Delay Timer DT\\ Sound Timer ST | | virtueller Prozessor | 16 Register V0..VF\\ Index-/Adressregister I\\  (Stackregister SP)\\ (Program Counter PC) \\ Delay Timer DT\\ Sound Timer ST |
Zeile 141: Zeile 192:
  
 <code> <code>
-+---------------------+++---------------------+ --> x
 |(0,0)          (63,0)|  (x,y) |(0,0)          (63,0)|  (x,y)
 |                     | |                     |
-|                     |+|                     
 |(0,31)        (63,31)| |(0,31)        (63,31)|
 +---------------------+ +---------------------+
 +|
 +v
 +y
 </code> </code>
  
Zeile 207: Zeile 261:
 | 0mmm  | MLS@mmm         | SYS addr            | Do 1802 machine language subroutine at 0MMM (subroutine must end with D4 byte)                                                                                                                     | | 0mmm  | MLS@mmm         | SYS addr            | Do 1802 machine language subroutine at 0MMM (subroutine must end with D4 byte)                                                                                                                     |
  
-Die Assemblerbezeichnungen entsprechen http://devernay.free.fr/hacks/chip8/C8TECH10.HTM+Die Assemblerbezeichnungen entsprechen http://devernay.free.fr/hacks/chip8/C8TECH10.HTM ([[homecomputer:chip8:referenz|]])
  
  
 ==== Beispiel: wandernde Acht ==== ==== Beispiel: wandernde Acht ====
 +
 +Beispiel 2 aus "RCA COSMAC VIP Instruction Manual" S.16
  
 Programm Programm
 <code> <code>
-200: A2 10 61 00 62 00 D1 25 +200: A2 10 61 00 62 00 D1 25
 208: D1 25 71 01 72 01 12 06 208: D1 25 71 01 72 01 12 06
-210: F0 90 F0 90 F0 00 00 00+210: F0 90 F0 90 F0    
 +</code> 
 + 
 +Assembler-Code 
 +<code> 
 +200:         LD   I, L210    ; A210   Index auf L210  
 +202:         LD   V1, #00    ; 6100   Startposition (0,0) 
 +204:         LD   V2, #00    ; 6200    
 +206: L206    DRW  V1, V2, #5 ; D125   "8" zeichnen (5 Bytes ab I) 
 +208:         DRW  V1, V2, #5 ; D125   und wieder löschen 
 +20A:         ADD  V1, #01    ; 7101   Position nach rechts 
 +20C:         ADD  V2, #01    ; 7201   und unten verändern 
 +20E:         JP   L206       ; 1206   und neu zeichnen 
 +     ; Sprite "8" (4x5 Pixel) 
 +210: L210    DB   %11110000  ; F0     ####.... 
 +211:         DB   %10010000  ; 90     #..#.... 
 +212:         DB   %11110000  ; F0     ####.... 
 +213:         DB   %10010000  ; 90     #..#.... 
 +214:         DB   %11110000  ; F0     ####.... 
 +</code> 
 + 
 +==== Beispiel: Zähler ==== 
 + 
 +Beispiel 3 aus "RCA COSMAC VIP Instruction Manual" S.16 
 + 
 +Der **FX29**-Befehl setzt I auf ein Fünf-Byte-Muster im internen Speicher, das die niederwertige hexadezimale Ziffer von VX darstellt. Wenn VX = 07 ist, dann zeigt I auf die  Adresse eines "7" -Musters, das dann auf dem Bildschirm mit einer **DXYN**-Anweisung angezeigt werden kann. N muss für diese eingebauten hexadezimalen Muster immer 5 sein. 
 + 
 +Das folgende Programm veranschaulicht die Verwendung der Anweisungen für FX29 und FX33.  
 +Dieses Programm erhöht kontinuierlich V3 und konvertiert es 
 +in Dezimalform und zeigt es auf dem Bildschirm an. 
 + 
 +Programm 
 +<code> 
 +200: 63 00 A3 00 F3 33 F2 65 
 +208: 64 00 65 00 F0 29 D4 55 
 +210: 74 05 F1 29 D4 55 74 05 
 +218: F2 29 D4 55 66 03 F6 18 
 +220: 66 20 F6 15 F6 07 36 00  
 +228: 12 24 73 01 00 E0 12 02
 </code> </code>
  
Zeile 222: Zeile 316:
  
 <code>    <code>   
-L200: LD   I,  #210           ; A210   Index auf L210  +L200: LD   V3, #00            ; 6300  Startwert 
-      LD   V1, #00            ; 6100   Startposition (0,0) +L202: LD   I,  #300           ; A300  Speicheradr. für BCD-Zahl 
-      LD   V2, #00            ; 6200 +      LD   B,  V3             ; F333  Speichert die BCD-Darstellung von V3 an den Speicherplätzen I, I+1 und I+2. 
-L206: DRW  V1V2, #5         ; D125   "8" zeichnen (5 Bytes ab I) +      LD   V2, [I]            ; F265  Werte aus dem Speicher ab Position I in die Register V0 bis V2 kopieren  
-      DRW  V1V2, #5         ; D125   "8" löschen +      LD   V4, #00            ; 6400  Position (0,0) 
-      ADD  V1, #01            ; 7101   Position nach rechts und unten +      LD   V5, #00            ; 6500 
-      ADD  V2, #01            7201 +      LD   F,  V0             ; F029  I auf Ziffern-Sprite für V0 setzen (Hunderter) 
-      JP   L206               1206   und neu zeichnen +      DRW  V4V5, #5         ; D455  anzeigen 
-;       +      ADD  V4, #05            ; 7405  Position (5,0) 
-L210db #F0#90, #F0#90, #F0     Sprite "8"+      LD   F,  V1             ; F129  auf Ziffern-Sprite für V1 setzen (Zehner
 +      DRW  V4V5, #5         ; D455  anzeigen 
 +      ADD  V4, #05            ; 7405  Position (10,0) 
 +      LD   F,  V2             ; F229  I auf Ziffern-Sprite für V1 setzen (Einer) 
 +      DRW  V4, V5, #5         D455  anzeigen 
 +      LD   V6, #03            6603 
 +      LD   ST, V6             ; F618  Sound Timer = 3 (kurzer Piep) 
 +      LD   V6, #20            6620   
 +      LD   DT, V6             ; F615  Delay Timer = 20 (0,3 s) 
 +L224LD   V6DT             ; F607  Warten bis Delay Timer = 0 
 +      SE   V6, #00            ; 3600  Nächste Anweisung überspringenwenn V6=0  
 +      JP   L224               ; 1224  sonst weiter warten 
 +      ADD  V3, #01            7301  Zähler erhöhen 
 +      CLS                     ; 00E0  Bildschirm löschen 
 +      JP   L202               ; 1202  neu anzeigen
 </code> </code>
- 
  
  
  • z9001/software/chip_8.1613722485.txt.gz
  • Zuletzt geändert: 2021/02/19 08:14
  • von volkerp