Commit Graph

72 Commits

Author SHA1 Message Date
Greg Hewgill c9c609be1d Separate CPU core and UI processes
This is a first step toward separating the CPU core and UI.  The UI program
starts the CPU core as a subprocess and communicates through its standard input
and output. The protocol is deliberately simple at this point. Each bus request
from the core is exactly eight bytes:

    +-------------------------+
    | cpu cycle counter high  |
    +-------------------------+
    | cpu cycle counter       |
    +-------------------------+
    | cpu cycle counter       |
    +-------------------------+
    | cpu cycle counter low   |
    +-------------------------+
    | 0x00=read / 0x01=write  |
    +-------------------------+
    | address high            |
    +-------------------------+
    | address low             |
    +-------------------------+
    | value (unused for read) |
    +-------------------------+

A single-byte response from the UI is required for a read request, and a
response must not be sent for a write request.

The above protocol is expected to change. For example:

    - the UI should tell the CPU core which address ranges are of interest
    - needs ability to send memory images to the core (both ROM and RAM)

The stream communications is currently buggy because it expects that all eight
bytes will be read when requested (that is, partial reads are not handled). In
practice, this seems to work okay for the moment.

To improve portability, it may be better to communicate over TCP sockets
instead of stdin/stdout.
2011-08-16 12:54:23 +12:00
James Tauber 7c657a8dd8 removed unused import 2011-08-15 09:41:58 -04:00
James Tauber a2fcbd5238 adjusted speaker sample length to allow for leading edge 2011-08-15 09:37:32 -04:00
James Tauber fbd213e240 made options...um...optional param to Memory so tests pass 2011-08-15 09:34:49 -04:00
James Tauber 51acc8e156 Merge branch 'master' into options
Conflicts:
	applepy.py
2011-08-15 09:27:53 -04:00
James Tauber 882e8478f8 Merge pull request #8 from ghewgill/arrowkeys
map left/right arrow keys to ^H/^U
2011-08-15 06:18:52 -07:00
Greg Hewgill 8827db4f6a command line options: --rom, --ram, --quiet 2011-08-15 22:47:16 +12:00
Greg Hewgill a543112ee9 map left/right arrow keys to ^H/^U 2011-08-15 22:19:03 +12:00
Greg Hewgill 27d7a717dc add flash attribute to text mode 2011-08-15 21:58:10 +12:00
James Tauber b9033a459a moved speaker buffer playing into the Speaker class 2011-08-15 02:30:28 -04:00
James Tauber 4dd414dea8 implemented speaker; not a bad hack :-) 2011-08-15 02:22:58 -04:00
James Tauber be91422317 refactored memory access so cycle can be passed in 2011-08-15 00:21:20 -04:00
James Tauber a92dcfecd3 implemented cycle calculation (except for page boundary crossing) 2011-08-14 23:50:34 -04:00
James Tauber fcb1d585a0 added test_run to run CPU over a fragment of memory with no UI event handling (for automated testings) 2011-08-14 17:21:03 -04:00
James Tauber bdc7b3a1e2 improved coloured for better whites 2011-08-14 03:52:56 -04:00
James Tauber 96ad7be994 fixed missing self 2011-08-13 09:49:14 -04:00
James Tauber f3e0cef441 refactored memory so RAM just subclasses ROM, adding write_byte 2011-08-13 09:47:18 -04:00
James Tauber 6b163f1c2d whitespace nits 2011-08-13 09:43:55 -04:00
James Tauber 4c333ec125 added load_file to RAM 2011-08-13 09:41:45 -04:00
James Tauber 1be14989ca implemented HIRES colour 2011-08-13 09:11:46 -04:00
Greg Hewgill 5a8bf9a516 use pregenerated character bitmaps for text mode 2011-08-14 00:16:42 +12:00
James Tauber e37c4dcbcd added HIRES graphics support based on code from ghewgill: 5aa8ca2caa 2011-08-13 07:52:17 -04:00
James Tauber 8f3b640393 always draw the spaces between scanlines 2011-08-13 07:24:23 -04:00
James Tauber 2f71ca9029 in mixed mode, assume monitor is colour 2011-08-13 07:22:10 -04:00
James Tauber 38736cf243 refactored update_text and update_lores into a single method 2011-08-13 07:06:11 -04:00
James Tauber 9e92bbba97 display full width of characters 2011-08-13 06:37:47 -04:00
James Tauber 588f913eb2 character heights are really 8 not 9 2011-08-13 06:36:21 -04:00
James Tauber 7cc9e8bdad implemented LORES graphics 2011-08-13 06:33:12 -04:00
James Tauber 4267732d7f make display optional (for testing) 2011-08-13 04:02:43 -04:00
James Tauber d11aff5416 Merge branch 'master' into pygame 2011-08-13 04:00:56 -04:00
James Tauber 2e34927e7c got tests working again after memory refactor 2011-08-13 04:00:40 -04:00
James Tauber 9220ec85db ported to pygame and added bit-accurate characters 2011-08-13 03:52:07 -04:00
James Tauber 02714dff55 if writing to text screen row group 3 just skip instead of throwing exception 2011-08-07 07:03:50 -04:00
James Tauber 6525a27511 don't treat indices as signed in indexed addressing modes (ht: ghewgill) 2011-08-07 06:42:47 -04:00
James Tauber 4177ae0b25 consistent whitespace 2011-08-07 06:29:15 -04:00
James Tauber 772cdad470 Merge pull request #4 from ghewgill/master
add disassembler
2011-08-07 03:22:40 -07:00
James Tauber c42c5044fc split memory handling into separate classes for RAM, ROM and Soft Switches 2011-08-07 06:19:49 -04:00
Greg Hewgill 267d0c8e06 add disassembler, enable for dump mode 2011-08-07 21:52:26 +12:00
Greg Hewgill 56e82f7cb6 don't allow writes to ROM area (this caused the ][+ ROM to hang on boot) 2011-08-07 21:31:01 +12:00
Greg Hewgill c9dcee2f08 fix typos for zero_page_y_mode in instruction dispatch table 2011-08-07 20:30:44 +12:00
Greg Hewgill 1925846c3c fix dump() function so it works (when uncommented) 2011-08-07 19:32:39 +12:00
Greg Hewgill dde4a83f85 fix typo in instruction table 2011-08-07 19:10:30 +12:00
Greg Hewgill e961d7e00d simplify calculating signed values in adc and sbc 2011-08-07 18:33:42 +12:00
Greg Hewgill 5a8b25b771 only need to allocate 64k of memory 2011-08-07 18:17:24 +12:00
James Tauber ce179a470f if curses can't write a character to the screen, just skip it; fixes #1 2011-08-07 01:34:10 -04:00
James Tauber 44099ae4f2 improved implementation of indirect bug across page boundaries including indexed indirects as well 2011-08-07 01:22:48 -04:00
James Tauber c101868549 fixed error in BVS 2011-08-07 00:39:17 -04:00
James Tauber 36355def33 whitespace nit 2011-08-07 00:37:49 -04:00
James Tauber f521fba883 properly use 0 and 1 not False and True for flags 2011-08-07 00:30:12 -04:00
James Tauber 777266f8e1 implemented non-accumulator version of ROR 2011-08-07 00:24:25 -04:00