For the ASCII debug version:
git clone https://github.com/c1570/chipscd chips/tests./run_pc_version.sh -d DISKIMAGE.D64
For the Sokol GUI version:
mkdir fips-workspace && cd fips-workspacegit clone https://github.com/floooh/chips-testcd chips-test && git checkout 5bd6333 && curl -o fips.yml https://raw.githubusercontent.com/c1570/chips/refs/heads/c1541/chips-test-fips.yml./fips maketo build../fips-deploy/chips-test/linux-make-debug/c64-ui c1541to run the emulator including the C1541 code
- Ultimate Commodore 1541 Drive Talk
- Hardware-Aufbau der 1541
- Gate Array
- ROM disassembly note this is for 901229-01, chips uses 901229-05 or 06
- G64 documentation
- Denise source code: mechanics.cpp - see via2.ca1In and cpu.triggerSO - and opcodes.cpp - see soBlock
- AAY1541 - see VIA registers
- C64 CIA2 - see $DD00, "low" is 0V
- DONE: Get drive CPU to reset and run to idle ($ec12..$ec2d)
- DONE: Connect drive and host (reading error channel from BASIC should return
73, CBM DOS V2.6 1541, 0, 0) - DONE: Read directory from GCR data (i.e., keep passing track 18 GCR data to VIA, handle SYNC and SO CPU line, needs m6502.h changes, see Denise source)
- DONE: Read full disk from G64 image (implement stepper motor)
- DONE: Read full disk from D64 image (on the fly encoding from D64 to GCR, see nibtools fileio.c/gcr.c for conversion code)
- DONE: Transwarp compatibility
- RP2 variant, disk write
A toolbox of 8-bit chip-emulators, helper code and complete embeddable system emulators in dependency-free C headers (a subset of C99 that compiles on gcc, clang and cl.exe).
Tests and example code is in a separate repo: https://github.com/floooh/chips-test
The example emulators, compiled to WebAssembly: https://floooh.github.io/tiny8bit/
For schematics, manuals and research material, see: https://github.com/floooh/emu-info
The USP of the chip emulators is that they communicate with the outside world through a 'pin bit mask': A 'tick' function takes an uint64_t as input where the bits represent the chip's in/out pins, the tick function inspects the pin bits, computes one tick, and returns a (potentially modified) pin bit mask.
A complete emulated computer then more or less just wires those chip emulators together just like on a breadboard.
In reality, most emulators are not quite as 'pure' (as this would affect performance too much or complicate the emulation): some chip emulators have a small number of callback functions and the adress decoding in the system emulators often take shortcuts instead of simulating the actual address decoding chips (with one exception: the lc80 emulator).