mattmikolay / chip-8 Goto Github PK
View Code? Open in Web Editor NEWA collection of CHIP-8 programs and documentation
License: MIT License
A collection of CHIP-8 programs and documentation
License: MIT License
The extension reference says that both CHIP-10 and HI-RES CHIP-8 have a resolution of 128 x 64. This is subtly incorrect.
CHIP-10 is indeed 128 x 64 (through some trickery and extra hardware requirements), but HI-RES CHIP-8 is in fact 64 x 128, which it achieves by reducing each pixel's vertical height from four scanlines to one.
Ipso Facto issue 40 from 1984 describes CHIP-8 AE (ACE Extended, where ACE stands for Association of Computer-chip Experimenters), an extension (or actually two variants of an extension) for he 1861 Pixie chips and the ACE VDU display board.
Might be interesting to add it to your archive. It contains a whole bunch of new instructions.
See page 12: http://www.cosmacelf.com/publications/newsletters/ipso-facto/ipso-facto-40.pdf
8XYE should work as 8XXE, the Y part is ignored.
FX55 & FX65 should not change I.
you can find an emulator online http://chip8.byethost24.com, and select TICTAC game rom.
if 8XYE and FX55, FX65 are implemented as in your document, this game will not work.
[https://github.com/trapexit/chip-8_documentation
](this document) is much more precise.
In the mentioned section below the sentence:
"The bits of a data register can also be shifted to the left or to the right using the following instructions:"
The instruction 8XY1 does not match it's description in the table.
According to the page "Chip-8 Instruction Set", the instruction 8XYE, as opposed to 8XY1, allows to "Store the value of register VY shifted left one bit in register VX". The instruction 8XY1 is said to "Set VX to VX OR VY"
Sources
https://github.com/mattmikolay/chip-8/wiki/Mastering-CHIP%E2%80%908#all-about-data-registers
https://github.com/mattmikolay/chip-8/wiki/CHIP%E2%80%908-Instruction-Set
The technical reference on the wiki currently reads:
The sound timer provides CHIP-8's only facility for sound output. When the sound timer's value is non-zero, a tone will be emitted from the system's speaker.
I think changing that "when" to "while" would be a little less ambiguous, and clarify that the beep lasts until the timer reaches 0x01
. It's a minor thing for sure, but I still think it would be helpful.
It is described here https://archive.org/stream/ETIA1981/ETI%201981-11%20November#page/n115/mode/2up
There is an instruction set description and sample programs. FX00 sets pitch of beep to VX.
I have the impression from https://www.reddit.com/r/retrobattlestations/comments/7npigb/dream_6800_build/ds3o6gp?utm_source=share&utm_medium=web2x this post that there may be more programs in other issues.
Can you clarify whether the 8XY6 and 8XYE instructions change the VY register as well? The table below in your "Mastering CHIP-8" (and the Wiki) appears to mean that they change only the VX register: VX = VY >> 1 and VX = VY << 1.
8XY6: Store the value of register VY shifted right one bit in register VX ...
8XYE: Store the value of register VY shifted left one bit in register VX ...
On the other hand, the paragraph below the table gives an impression that register VY has to be modified as well: VX = VY = VY >> 1 and VX = VY = VY << 1.
It is a common misconception when programming in CHIP-8 to assume that the VX register is shifted by this instruction, and VY remains unmodified.
I found that Octo, a popular CHIP-8 assembler, uses the first interpretation while there are some documentation that supports the second one: Chip-8 on the COSMAC VIP and the previous version of the CHIP-8 page on Wikipedia.
Anyway, thank you for your great documentation!
Hi @mattmikolay,
Thanks for the awesome CHIP-8 resources. I'm writing my first emulator now using your wiki and its links as a reference and I think I have come across a typo. On a system with 4096 bytes of memory, if the final 352 bytes are reserved (and the first 0x200), then addresses 0x200 to 0xE9F should be free for a CHIP-8 program. However the CHIP-8 Technical Reference says otherwise. This is the change that I think is needed:
- On VIPs with 4096 bytes of RAM (and modern implementations), this leaves addresses 0x200 to 0xE8F free.
+ On VIPs with 4096 bytes of RAM (and modern implementations), this leaves addresses 0x200 to 0xE9F free.
Cosmac VIP, ETI-660, Dream 6800, and Chip48 interpreters all have different font data. This can effect program behavior because of pixel based collision. Some programs have text that looks off center as well.
Tested in Cosmac VIP and ETI-660 in Emma 02, Dream 6800 in MESS/MAME, and Chip48 in Emu48 for hp48sx.
Used cosmac VIP chip8 ram sha1 8AA634C239004FF041C9ADBF9144BD315AB5FC77
Used eti rom sha1 C0C4951E02F873F15560BDC3F35CDF3F99653922
Used Dream 6800 with original CHIPOS ROM. sha1 60F26E57A058262B30BEFCECEAB4363A5D65D877
Used chip48 2.25
https://groups.google.com/forum/#!searchin/comp.sys.handhelds/2.25/comp.sys.handhelds/z8KoBcbCExQ/q4VsdUu-1ssJ
which is sha1 16AB1BAC7D4861C26EFA4DF29E3AA3CE1BD8F7E5 after removing transfer dependent 13 byte hp header.
Images showing the fonts, and text with their binary representations are attached.
I suspect there are variants of the chip8 data used by the cosmac and telmac 1800. The author of chip48 had a telmac, but the font used by chip48 does not look exactly like the font seen in the chip8 ram used by Emma 02. (same chip8 ram data is used for cosmac and telmac)
https://groups.google.com/d/msg/comp.sys.hp48/eKdWisxs-_Q/63e9bVZcOkgJ
I intend to do more research into this.
chip48font.txt
cosmacvipfont.txt
dream6800font.txt
eti660font.txt
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.