Peter Evans
d2e21b55c4
Implement the sector decode function
...
This was a bear to do, and the product being committed is probably my
third (or fourth?) try.
2018-02-02 17:19:38 -06:00
Peter Evans
fadf5a9782
Add decode...code
2018-02-01 18:41:01 -06:00
Peter Evans
323803866a
Include better documentation of otherwise grumpy functions
2018-01-31 15:58:32 -06:00
Peter Evans
98c2ef16cc
Add encode function for nib
2018-01-31 15:40:39 -06:00
Peter Evans
4943d66e8c
Correct typo so it's clear this is a get OOB
2018-01-31 15:40:06 -06:00
Peter Evans
c031822063
Use nibbilized size for dest; allow offset to overflow
2018-01-31 14:28:29 -06:00
Peter Evans
8a53e02f00
Rename to enc.c, add header file
2018-01-31 00:09:07 -06:00
Peter Evans
b09ca2dae5
Reword comment
2018-01-30 18:55:23 -06:00
Peter Evans
5c7dbb4cfe
My first crack at some code for nibblization
2018-01-30 16:30:23 -06:00
Peter Evans
b2bfee7f96
The SLOTCXROM switch seems to work opposite
...
Which seems weird, but I've verified this in some other places.
2018-01-29 00:30:12 -06:00
Peter Evans
418688cd15
Lock disk drives during disassembly
2018-01-28 18:06:14 -06:00
Peter Evans
33b44d1a70
selected_drive will now have a default value (of drive1)
2018-01-27 21:53:12 -06:00
Peter Evans
2c3d6a4dfa
Reimplement idx and idy to use 16-bit addresses
...
While I have found some conflicting details on how this should be done,
it seems pretty clear to me that IDX and IDY work with 16-bit addresses,
not 8-bit. The inability to do so was preventing us from probing
peripheral ROM (e.g. at $C705, for the disk controller).
2018-01-27 19:54:55 -06:00
Peter Evans
4165c1cefc
Make idx, idy clearer
...
I'm still not confident this is how it _should_ work, but I have found
conflicting accounts online for the behavior of these two modes. The
current code is what allows the Apple II to bootstrap as it should.
2018-01-27 13:04:19 -06:00
Peter Evans
76e4d3797f
By default SLOTCXROM should be high
2018-01-26 22:01:46 -06:00
Peter Evans
ca5276cb6b
It turns out we don't use carry for addr modes.
...
This fix actually corrects a rather irritating bug where the Apple ][
logo was displaying one-off--e.g., as "pple ][D".
2018-01-26 21:18:42 -06:00
Peter Evans
9c0e01ecd2
Add drive phases, switches for control and i/o
2018-01-26 19:49:19 -06:00
Peter Evans
e901bcf54d
Add docblock comments
2018-01-25 14:12:49 -06:00
Peter Evans
217b27b040
Handle inversed text
2018-01-24 20:05:47 -06:00
Peter Evans
2ae272af3a
Stop flickering issue by clearing before drawing
2018-01-24 20:04:53 -06:00
Peter Evans
d581194bbc
Add apple text functions and refactor draw logic for text
2018-01-24 16:11:08 -06:00
Peter Evans
6069ab4d1b
Add inverse font
2018-01-24 14:26:28 -06:00
Peter Evans
cfee8baf25
Refresh once every thirtieth of a second
...
And also refresh on keypress
2018-01-23 23:14:26 -06:00
Peter Evans
882cf2c166
Comment out cycles
2018-01-23 21:41:43 -06:00
Peter Evans
9f518d5141
We should not resolv the address a second time
2018-01-23 21:41:30 -06:00
Peter Evans
1751a7af1f
Don't try to call resolv() if resolv is NULL
2018-01-23 21:18:42 -06:00
Peter Evans
9215600148
Don't attempt to render a glyph if render is NULL
2018-01-23 16:09:27 -06:00
Peter Evans
766aea9c96
Change dbuf switches to work off correct addresses
2018-01-23 15:51:06 -06:00
Peter Evans
8f516db42b
Remove arbitrary counter and allow escape to exit
2018-01-23 15:04:11 -06:00
Peter Evans
775a145480
Rework screen display logic for more efficiency
2018-01-23 14:52:16 -06:00
Peter Evans
b5e1e09a35
Bump up counter by a ton
2018-01-22 21:43:18 -06:00
Peter Evans
b97af6cb16
Disable active refresh
2018-01-22 21:43:01 -06:00
Peter Evans
47d7483297
Disable usleep delay for now
2018-01-22 21:42:42 -06:00
Peter Evans
e0b4fd27e8
Better logging
2018-01-22 21:42:30 -06:00
Peter Evans
56433e2ebe
Show nothing if no value is associated with an instruction
2018-01-22 12:31:19 -06:00
Peter Evans
945bf23f22
Use correct default status and memory mode
2018-01-21 21:33:12 -06:00
Peter Evans
c2debec4d3
Make output more compact
2018-01-21 21:32:43 -06:00
Peter Evans
ef7977c18b
Only set or unset DHIRES if IOUDIS is on
2018-01-21 21:32:22 -06:00
Peter Evans
d119854631
Carry is set by left- or right-most bits
...
Don't rely on modify_status() to get it right.
2018-01-21 16:21:15 -06:00
Peter Evans
3206332a7d
Set carry if the right-most bit is 1
...
Don't consider the left-most bit
2018-01-21 16:17:31 -06:00
Peter Evans
5d8403aaa7
Only set negative if operand has it set
...
That is, don't consider A & operand for negative.
2018-01-21 16:12:03 -06:00
Peter Evans
ecd8a7974a
Add "BAD" instruction to crash when we hit an invalid opcode
2018-01-21 12:48:34 -06:00
Peter Evans
1334e34e76
Use A & oper here
2018-01-21 12:47:58 -06:00
Peter Evans
f9a95827f5
Change carry flag strategy according to docs
2018-01-21 12:47:36 -06:00
Peter Evans
5f93bdae25
Try to match technical behavior described for JSR/RTS
2018-01-21 01:17:04 -06:00
Peter Evans
0581ed6b44
Fix stack in several ways
...
1. The stack should descend, not ascend;
2. The stack should be pushed byte for byte; meaning, when pushing P or
A, those should consume one byte, not two;
3. The MSB should be pushed first when doing JSR and BRK, which makes
some sense if you were reading the stack from $0100 - $01FF.
2018-01-21 01:09:42 -06:00
Peter Evans
42c7fcbb47
XOR the orig and result bit 7 for overflow
...
We should have done this all along. We hadn't accounted for if orig >=
0x80 and result < 0x80, but at that point, it's kind of silly to have a
long complicated condition that we can satisfy simply with an XOR.
(Which is what the machine would do anyway.)
2018-01-21 00:05:49 -06:00
Peter Evans
809e6ca7c6
Overflow should simply be bit 6's value
2018-01-20 23:47:02 -06:00
Peter Evans
fcd25f6385
Use set16 to push items to the stack.
...
The previous method was not incorrect, but set16 already handles the
little-endian logic for us, and there's no need to do something bespoke
here that we then need to test for separately.
2018-01-20 23:43:58 -06:00
Peter Evans
2f777ce881
Several core changes to status, soft switches
...
Regarding soft switches, we had several we should have been listening
for on both reads and writes, but were only doing so on writes; this is
now fixed.
Regarding statuses, we were incorrectly calculating both carry and
overflow. This should now be fixed, although some quick examinations of
disassembly output suggest there is something else amiss. Debugging will
continue shortly.
2018-01-20 21:01:26 -06:00
Peter Evans
103a188faf
Add an extra line break
...
Mostly for vim to make it easier to skip over blocks with '}'.
2018-01-19 19:14:59 -06:00
Peter Evans
a9cf25853d
Show the individual flags of the P register
2018-01-19 13:14:02 -06:00
Peter Evans
6b160c6ca2
Show the dereferenced value for a given address
2018-01-19 12:18:24 -06:00
Peter Evans
2c319399d2
Change disassembly to add more info
2018-01-19 00:34:57 -06:00
Peter Evans
e286ba34f5
Greatly increase counter
2018-01-18 22:19:31 -06:00
Peter Evans
8d9a990997
Remove addresses that aren't handled in dbuf
2018-01-18 22:19:15 -06:00
Peter Evans
0ae4f041e5
Increase counter amount
2018-01-18 16:21:56 -06:00
Peter Evans
d4bf5da480
Draw text in 40 column mode
2018-01-18 16:21:25 -06:00
Peter Evans
a55fd2f71f
Remove log message
2018-01-18 16:20:53 -06:00
Peter Evans
37df8db225
Initiate last_key and key_pressed with default values
2018-01-17 15:28:23 -06:00
Peter Evans
c0ce4ec2f1
Set strobe to false by default
...
Otherwise we could get garbage values, and that was flagging some tests
as failed at random times
2018-01-17 15:16:25 -06:00
Peter Evans
6670df930b
Remove unnecessary functions and tests
2018-01-17 14:02:37 -06:00
Peter Evans
bf529d6c9b
Finish map, mapper handling for keyboard events
...
We still need to revise the test code we currently have for handling
keyboard functions; I imagine some code will need to be removed.
2018-01-17 01:07:31 -06:00
Peter Evans
8d4283b1dc
Add first work on keyboard support
...
Mainly the switch_read function, which had necessitated some work done
in the vm_screen area
2018-01-16 23:50:02 -06:00
Peter Evans
9811bbe450
Add switch read/write for display buffer switches
2018-01-16 23:48:49 -06:00
Peter Evans
b1177784a0
Allow access to the last key pressed and key_pressed status
2018-01-16 23:42:10 -06:00
Peter Evans
05e95d7798
Use bitwise OR, not AND, to add flags.
...
This was a copy-n-paste oops. I swear I know how bitwise AND and OR
works. Pinky swear!
2018-01-16 20:51:14 -06:00
Peter Evans
603ad7a036
Begin adding support for memory soft switches
2018-01-16 16:34:38 -06:00
Peter Evans
2c39120098
Rename video_mode -> display_mode
...
This also changes the _kind_ of field from an incrementally enumerated
one to a collection of bit flags.
2018-01-16 16:13:50 -06:00
Peter Evans
bcf6b213a6
Account for changes to rom segment structure
2018-01-16 15:46:35 -06:00
Peter Evans
a0a5132099
Add pc file for peripheral card ROM
2018-01-15 23:50:33 -06:00
Peter Evans
2db5c791ba
Remove peripheral rom init
2018-01-15 17:42:27 -06:00
Peter Evans
ac39349344
Reorganize ROM storage
2018-01-15 17:10:27 -06:00
Peter Evans
6cbcf0f9ab
Increase the counter to see more ops running
2018-01-14 22:31:10 -06:00
Peter Evans
cadc19b3e5
Add display buffer read/write mappers
2018-01-13 15:40:40 -06:00
Peter Evans
45eb7b5e58
Add zero page memory mapper functions
...
This also adds tests for those functions. We have, furthermore, removed
some redundant (and non-externed!) functions from apple2.mem.c which was
the old bank switching code that got moved to apple2.bank.c.
2018-01-13 00:38:29 -06:00
Peter Evans
3738d70a43
Switch bank code into its own file
2018-01-12 22:06:49 -06:00
Peter Evans
208c909fc2
Memory is determined solely by BANK_ALTZP.
...
Previously, we just used whatever the segment was that got passed in.
But aside from switching the stack and zero page, ALTZP also changes
where bank-switchable memory is read from and written to; it's either
always aux memory (ALTZP is on) or always main memory (ALTZP is off).
2018-01-12 21:21:08 -06:00
Peter Evans
c953616a71
Finish refactor to separate bank_switch and memory_mode
...
There is one failing test, which I expect to fail at this point; that's
because we need to write a read/write map function for the stack and
zero page so that they use aux memory when BANK_ALTZP is on, and main
memory when not.
2018-01-12 21:04:21 -06:00
Peter Evans
ceccacfbc8
Rework bank switch and memory mode into their own fields.
...
This is to better define and respect the various modes that you can have
in Apple II memory access. This is a work in progress at the moment.
2018-01-12 16:21:49 -06:00
Peter Evans
f69454c965
Some soft switches now require consecutive reads
...
To allow this to work, we had to allow the CPU struct to record what the
last opcode/operand/address were, although in truth we only needed the
last address.
2018-01-12 14:49:27 -06:00
Peter Evans
7d6886a3a8
Change last_addr field to eff_addr
2018-01-12 13:57:48 -06:00
Peter Evans
e56ed9ea43
Add missing docblocks
2018-01-11 22:48:40 -06:00
Peter Evans
21040898b3
Return, don't break in write mapper; log if we get to the end
2018-01-11 22:23:53 -06:00
Peter Evans
d79bcba5ec
Add missing docblocks
2018-01-11 21:58:05 -06:00
Peter Evans
9564f86a57
Remove flash_memory function
2018-01-11 21:57:52 -06:00
Peter Evans
578e0b291c
Allow us to switch main/aux; write bank switch mappers
2018-01-11 19:52:13 -06:00
Peter Evans
a17ad0596b
Initialize cpu as NULL
...
Static analysis in clang caught this; we might try to free memory from a
garbage pointer value if the main segment malloc fails.
2018-01-11 13:25:22 -06:00
Peter Evans
9d2f9b6f60
Refactor to remove ram2
...
Both main and auxiliary memory need to keep an extra 4k of memory that
is bank-switchable, so we have changed to store that memory literally
within the main and aux segments.
2018-01-11 13:19:17 -06:00
Peter Evans
81b07361fb
Wait less time for instructions
2018-01-10 21:49:52 -06:00
Peter Evans
fe0ed815a9
Move bank switch set up for the mem init functions.
...
This also changes bank_switch to mirror at boot what the reset function
does later on. Without doing so, our init memory routines will fail.
2018-01-10 21:48:55 -06:00
Peter Evans
24e6e0fd25
Properly free main/aux memory
2018-01-10 21:29:25 -06:00
Peter Evans
8d9b48912e
Add memory injection to 6502; main memory in apple2
...
Note that memory _is_ now managed in apple2, and _not_ in mos6502.
2018-01-10 21:28:05 -06:00
Peter Evans
04854d903c
Add aux memory field
2018-01-10 20:36:44 -06:00
Peter Evans
8898c3e59d
Use macros to define segment read/write map functions
2018-01-10 20:12:48 -06:00
Peter Evans
3db536a83d
Change memory_mode -> bank_switch
...
This also changes the concept of the field; bank_switch is a collection
of bit flags now.
2018-01-10 19:59:33 -06:00
Peter Evans
343d870399
Add missing mach parameter to set_video/set_memory
2018-01-10 16:59:02 -06:00
Peter Evans
aa486656b3
Set the reset vector to the applesoft interpreter address
2018-01-10 16:47:18 -06:00
Peter Evans
cb53c70cda
We missed a doc-block for the new set16 func
2018-01-10 16:46:55 -06:00
Peter Evans
fcba14f91b
Add set16 function
2018-01-10 16:43:14 -06:00
Peter Evans
6af0ae85a4
Also force bank switch mode back to ROM
2018-01-10 15:16:12 -06:00
Peter Evans
c9188a288d
Reset should change the video mode to 40 column text
2018-01-10 15:14:07 -06:00
Peter Evans
7f6b8d3587
We can no longer assume PC increments during address handling
...
This change required a number of consequent changes to assumptions we'd
made, and I'm not 100% confident we have things right at this point in
time.
2018-01-09 20:59:14 -06:00
Peter Evans
e3ab043aee
We no longer need to pass the opcode here
2018-01-09 20:58:53 -06:00
Peter Evans
80a7671a19
Remove next_byte, read_byte; execute works without an opcode arg
...
This also adds RTS and RTI as instructions that "would jump".
2018-01-09 20:58:19 -06:00
Peter Evans
de859bcea8
We were not obeying little-endianness here
2018-01-09 16:24:25 -06:00
Peter Evans
d7148b88bf
Relative address was not being calculated correctly.
...
The disassembler is using the correct approach, so I adapted it to the
execution code.
2018-01-09 15:57:37 -06:00
Peter Evans
a267065059
Include cycle information
2018-01-09 15:57:20 -06:00
Peter Evans
8201117223
Change init routine to use peripheral function
2018-01-09 15:56:48 -06:00
Peter Evans
0e0244162f
Change objstore structure to contain all peripheral ROM
2018-01-09 15:56:21 -06:00
Peter Evans
3c46a41351
Fix little-endian issue with IND output
...
Also change the ADDR label to emit a hex code, not a decimal code.
2018-01-08 23:36:11 -06:00
Peter Evans
1abf0223c8
The value of PC by that point is correct.
...
Adding 2 skips us ahead farther than we should be going.
2018-01-08 22:25:37 -06:00
Peter Evans
f7b8740c2e
Let the CPU run for longer before it dies
2018-01-08 22:24:30 -06:00
Peter Evans
b21b48cac0
Fix a couple of issues...
...
1. The execute function should not be incrementing the PC register, as
this happens in other places.
2. The push_ and pop_stack functions were not considering that the data
should be in little-endian order.
2018-01-08 21:22:29 -06:00
Peter Evans
e4049a6a11
Better info on each opcode sequence
...
Plus fix a display bug that showed the operand in the wrong order.
2018-01-08 21:21:09 -06:00
Peter Evans
7c899122ad
We should advance to the next byte in execution
2018-01-08 21:15:56 -06:00
Peter Evans
a8bba409c3
Change 16-bit references to respect little-endianness
...
As the Apple II (or rather the 6502 chip) is little-endian, meaning the
least significant byte is the first byte you read going forward, rather
than the last byte.
2018-01-08 17:10:26 -06:00
Peter Evans
3f59db311b
Allow us to ignore some docblock errors
2018-01-07 20:08:46 -06:00
Peter Evans
b2add9c3de
Move vm_area logic into its own file
2018-01-07 20:05:02 -06:00
Peter Evans
95e57a8e19
Add get_map_machine function.
...
Mostly useless except for testing.
2018-01-07 20:00:09 -06:00
Peter Evans
ba47de0e4b
Add objstore_clear(), tests for objstore
2018-01-07 16:30:33 -06:00
Peter Evans
1c36c4ea4d
Add missing docblock comments
2018-01-07 16:07:29 -06:00
Peter Evans
cccf6df354
Move address resolver
2018-01-07 15:47:57 -06:00
Peter Evans
888eb25797
Refactor a bit for easier testing; add log_stream()
2018-01-07 15:05:20 -06:00
Peter Evans
5da65e0a9e
Change apple2dd -> apple2_dd
2018-01-07 14:46:54 -06:00
Peter Evans
665f7de37c
Rename apple2dd_ to apple2_dd_
...
Except for the struct object (apple2dd).
2018-01-07 13:44:07 -06:00
Peter Evans
8ad1311536
Add set_memory function
2018-01-06 21:37:15 -06:00
Peter Evans
d9527db033
Retrieve the 16-bit PC address.
...
This fixes a bug where we only got an 8-bit address from $FFFC and
ignored the LSB at $FFFD.
2018-01-05 16:15:13 -06:00
Peter Evans
70516a7f91
Add function to return 16-bit value from a segment address
2018-01-05 16:14:51 -06:00
Peter Evans
c6799db689
Separate reset logic from boot function
2018-01-05 16:04:01 -06:00
Peter Evans
af7dae6924
Advance PC by # of bytes consumed
2018-01-05 15:52:20 -06:00
Peter Evans
7ceee608b3
Stop delaying by 2 seconds
2018-01-05 15:52:04 -06:00
Peter Evans
c7aa9e9fc3
Resolver may be NULL; don't call if so
...
This change also registers a default value for operand (0).
2018-01-05 14:57:38 -06:00
Peter Evans
d5b6205713
Actually execute some opcodes
2018-01-05 14:55:33 -06:00
Peter Evans
fd8f36b34e
We need to use the mach cpu
2018-01-05 14:19:13 -06:00
Peter Evans
1de1e7788a
Rename status flags to MOS_
2018-01-05 14:18:39 -06:00
Peter Evans
2da613f7aa
Provisional state upon reboot
2018-01-04 20:09:53 -06:00
Peter Evans
3f0a091520
Use const pointers; fix function name typo
2018-01-04 19:59:04 -06:00
Peter Evans
700bc31465
Copy system rom into $C800..$CFFF; document.
...
Things are getting a little hairy...at least, as to my own
comprehension. Documentation is a must.
2018-01-04 19:53:12 -06:00
Peter Evans
e184304ec5
A little more documentation post-rwops changes
2018-01-04 14:21:05 -06:00
Peter Evans
171ff62551
Change create to use objstore vm_8bit data
2018-01-03 21:50:30 -06:00
Peter Evans
565dd1b34b
Make sure the object store got built
2018-01-03 21:50:01 -06:00
Peter Evans
06d37d24d7
Allow us to call objstore_init more than once.
...
This also separates some code into objstore_ready().
2018-01-03 21:49:26 -06:00
Peter Evans
7182608473
Copy vm_8bit buffer into rom/memory directly
2018-01-03 21:10:46 -06:00
Peter Evans
90d6c637c5
Add function to copy a buffer into a segment
2018-01-03 21:10:25 -06:00
Peter Evans
4d07bd7640
Add objstore code, tests
2018-01-03 20:51:20 -06:00
Peter Evans
b1c2a2109e
Just use stdout if we never opened a log file
2018-01-03 20:47:41 -06:00
Peter Evans
484a11e976
Pass in zero for an offset
2018-01-03 15:21:00 -06:00
Peter Evans
fac6b4f574
Initialize system and disk2 rom
2018-01-03 15:20:48 -06:00
Peter Evans
86dad129b6
Let us fread into a segment offset
2018-01-03 15:16:30 -06:00
Peter Evans
e7a404508e
Add init functions for disk2, sys rom
...
Also move the defines for bank offset, rom size, etc. into apple2.mem.h
which makes a little more sense.
2018-01-03 15:07:19 -06:00
Peter Evans
5b2c376abc
Prevent writes to the ROM bank
2018-01-03 14:27:55 -06:00
Peter Evans
9a1e51fec3
We need to pass the machine, not memory
2018-01-02 23:49:29 -06:00
Peter Evans
cb9a7d0fce
Let the segment vm know about the machine
2018-01-02 21:12:21 -06:00
Peter Evans
ee7b5f66b0
Add support for a map machine pointer
...
To be sent to the read/write functions that are implemented by said
machine.
2018-01-02 21:11:43 -06:00
Peter Evans
3fe7a4e0bb
Use explicit memory size of MOS6502
2018-01-02 20:48:42 -06:00
Peter Evans
73f7d8f63a
Actually map memory when we create an apple2
2018-01-02 16:30:21 -06:00
Peter Evans
33c8f0de9d
Add memory map functions
2018-01-02 16:26:51 -06:00
Peter Evans
834959c10a
Add rom, ram2 bank memory; modify read/write sig
...
The signature for read/write map functions now accepts a void pointer so
that we can pass in the machine that those functions may need to know
about. This is a bit hairy, but allows us to avoid the need for a
yet-uglier global variable.
2018-01-02 16:24:51 -06:00
Peter Evans
49d475d534
Documentation
2018-01-01 17:41:15 -06:00
Peter Evans
d53b6df7a4
Add documentation; plus set sector/track pos to 0 on eject
2018-01-01 17:26:29 -06:00
Peter Evans
2aeef09f97
Remove unused msb variable
2018-01-01 17:12:41 -06:00
Peter Evans
8f04deb642
Comment out unused cycles variable
2018-01-01 17:12:25 -06:00
Peter Evans
78aab1bd13
Fix potential memory leaks in create()
2018-01-01 17:11:03 -06:00
Peter Evans
a2b4fe1466
Write an fread function for segments; use in apple2.dd
2017-12-31 20:28:11 -06:00
Peter Evans
e14e22a596
Uh, so we forgot to read data into the disk
2017-12-31 15:54:30 -06:00
Peter Evans
f70f21789b
Add flash memory, disassemble options
2017-12-31 15:50:59 -06:00
Peter Evans
ead5f28e79
Refactor to use cpu, not literal segments
2017-12-30 23:02:30 -06:00
Peter Evans
b42d5370aa
Small bug in the jump label code for IND
...
This also required a rethink on some core functions which now needed to
know about the memory segment; and further changes in the unit-testing
code on the disassembly suite was also necessary.
2017-12-30 22:50:23 -06:00
Peter Evans
7e142e2736
Properly handle indirect addresses
2017-12-30 21:48:16 -06:00
Peter Evans
26529f77ab
Implement jump table, labels in code
2017-12-29 17:08:25 -06:00
Peter Evans
927d03ebbe
Add scan function (rename original scan -> opcode); test
2017-12-29 15:31:05 -06:00
Peter Evans
f98e2f65ee
Add disassembly scan function, tests
2017-12-28 23:47:36 -06:00
Peter Evans
491b3c0c38
Add scan function for disassembly
2017-12-28 21:47:35 -06:00
Peter Evans
d95572bd4a
Move instruction strings to mos6502.dis.c
2017-12-27 21:21:33 -06:00
Peter Evans
32d08fbbc5
Add new file for opcode disassembly
2017-12-27 21:21:11 -06:00
Peter Evans
6a230341e1
Make vm_area_set be an inline function.
...
Gets most of the benefits of being a macro, but also gains type safety
(which macros do not have).
2017-12-27 17:10:51 -06:00
Peter Evans
30223e0bca
Remove screen area field; document area fields
2017-12-27 16:59:56 -06:00
Peter Evans
27f91ec00f
Use vm_area with bitfont_offset
...
This should further standardize on vm_area.
2017-12-27 16:47:26 -06:00
Peter Evans
efb8f04555
Use vm_area for draw_rect.
...
This simplifies and to some degree normalizes the way we reference areas
in the vm subsystem.
2017-12-27 16:42:30 -06:00
Peter Evans
c7b830bb4a
Switch references from SDL_Rect to vm_area
...
We still use SDL_Rect internally, but we want to abstract the use of it
in our API. The only thing the rest of the app should care about is the
vm_area struct.
2017-12-27 16:31:02 -06:00
Peter Evans
5407ce2d32
Add documentation for option functions
2017-12-27 14:32:13 -06:00
Peter Evans
76191991c8
Add a lot of missing documentation
2017-12-27 01:14:52 -06:00
Peter Evans
f8ce9ae1d1
Documentation
2017-12-26 17:13:34 -06:00
Peter Evans
8146687110
Don't create a window when testing
...
We do this by creating the notion of a "headless" mode, and skip window
creation in SDL.
2017-12-26 17:06:08 -06:00
Peter Evans
253db81460
Comment out unused instruction string table
2017-12-26 16:45:24 -06:00
Peter Evans
81804532df
Reorganize log.c
2017-12-26 16:44:28 -06:00
Peter Evans
a86fc8e80e
Reorganize
2017-12-26 16:42:04 -06:00
Peter Evans
f5af03786d
Reorganize
2017-12-26 16:39:23 -06:00
Peter Evans
f50d599545
Beginnings of lo-res graphics
2017-12-24 15:07:24 -06:00
Peter Evans
7b19279f1d
No need for this comment any longer
2017-12-22 20:45:26 -06:00
Peter Evans
4ad690212f
Blank out the space we want to render a character
2017-12-22 17:49:36 -06:00
Peter Evans
29652b2368
Implement draw text functionality
2017-12-22 15:48:48 -06:00
Peter Evans
b2c1bd9e6d
Hello world, in rendered text; use nearest pixel sampling
...
The scale change removes some blurriness that we saw when copying pixels
from the bitmap font into the renderer.
2017-12-22 12:56:22 -06:00
Peter Evans
979ca65f43
Add bitmap font to apple2, remove rectangle draw
2017-12-21 23:33:04 -06:00
Peter Evans
adac6346e8
Add color mode, text video modes
2017-12-21 11:52:56 -06:00
Peter Evans
87b67216b0
Default to lo-res mode
2017-12-20 21:54:54 -06:00
Peter Evans
23e113e72a
Add video mode switcher to handle logical sizes
2017-12-20 21:52:28 -06:00
Peter Evans
7d62548248
Add the bones of the draw functions and file
2017-12-20 21:33:15 -06:00
Peter Evans
f55b608bee
Move screen run logic into apple run_loop and create
2017-12-20 20:45:26 -06:00
Peter Evans
8c23f3fa7e
Switch window sizes for 4.375:3
2017-12-20 19:32:54 -06:00
Peter Evans
53db99f4fd
Use size options for window
2017-12-20 17:08:19 -06:00
Peter Evans
609e3eea7c
Add size option, functions to get width and height
2017-12-20 17:06:03 -06:00
Peter Evans
b1c146c62d
Add ability to set logical size of window at any time
...
We also removed the scale field, as the screen does not expect to manage
its own logical coordinates in SDL.
Additionally, we added an xcoords and ycoords function to the screen
externs so that you don't have to "know" that screen has those as
fields.
2017-12-20 16:44:24 -06:00
Peter Evans
f31fcd9c37
Add support for vm_bitfont
2017-12-19 21:50:50 -06:00
Peter Evans
05a641c8f6
Use SDL's render logical size feature
...
This allows us to work with the pure x/y coordinate system we set when
creating the vm_screen. SDL will take care of the translation of those
coordinates to whatever the window size is.
2017-12-18 14:32:15 -06:00
Peter Evans
4ef9e50792
Really basic implementation of SDL2.
...
Plus a crappy rectangle to prove that our vm screen code is working in
principle. (It will be removed shortly.)
2017-12-17 23:31:56 -06:00
Peter Evans
ad37d59b2d
Remove references to OpenGL/GLFW/GLEW
2017-12-17 20:20:11 -06:00
Peter Evans
afa07e346f
A few comments
2017-12-17 19:22:33 -06:00
Peter Evans
83dcfaf646
Add glew, defines for width/height
2017-12-17 19:09:54 -06:00
Peter Evans
a73c15c37c
Rename vm_screen_context to vm_screen
2017-12-17 16:42:05 -06:00
Peter Evans
8beb761535
Actually show a window.
...
This is also the beginning outline of how we want to abstract graphics
away in erc.
2017-12-16 23:38:59 -06:00
Peter Evans
b646bfc511
First stab at adding graphics.
...
This involves using glfw. This first commit creates a window but doesn't
do anything with it; it also just hangs until you can escape out
somehow.
2017-12-16 22:45:39 -06:00
Peter Evans
294fab76aa
Add boot function; modify main to use apple2 boot
2017-12-15 22:22:40 -06:00
Peter Evans
3f3210205f
We missed the size multiplier for memset()
...
In doing so, only a small portion of memory would have reliably been set
to zero; specifically, just the first element!
This change should resolve some intermittent test failures to guarantee
that all memory be zeroed.
2017-12-15 21:22:22 -06:00
Peter Evans
ed1a7b3278
Rename to read/write (without byte)
2017-12-15 21:03:38 -06:00
Peter Evans
b07848dd9d
Change name; move 140k, 240k
2017-12-15 21:00:59 -06:00
Peter Evans
06c8d623e7
Move MAX_SECTOR_POS and change shift into a while loop
2017-12-15 16:52:47 -06:00
Peter Evans
079a35507c
A number of updates in heavy dev phase
...
1. Add an insert function (to insert a new disk).
2. Add a new shift function to coordinate sector position updates when
reading or writing.
2017-12-15 16:45:20 -06:00
Peter Evans
256e0cf1d6
Don't write to the log stream if null
...
This prevents a somewhat vexing crash condition from happening.
2017-12-15 16:28:14 -06:00
Peter Evans
4dffea1dda
Make position non-static; add case for NULL data
2017-12-14 23:08:33 -06:00
Peter Evans
f629b350fa
We can't have a negative track pos; zero is the lowest
2017-12-14 22:46:50 -06:00
Peter Evans
82d22c8fab
Change name of header file in #include
2017-12-14 22:27:45 -06:00
Peter Evans
091939b06b
Renaming files
2017-12-14 22:24:30 -06:00
Peter Evans
24e599a8fd
Rename to apple2dd; add read/write functions
2017-12-14 22:14:55 -06:00
Peter Evans
0162544fa6
Add initial struct and drive code
2017-12-13 20:30:32 -06:00
Peter Evans
577e92de9e
Documentation is good. Write documentation.
2017-12-12 15:10:42 -06:00
Peter Evans
7da3c2ec20
Make use of our read/write mappers
2017-12-12 15:00:47 -06:00
Peter Evans
e019b6daee
A warning to the concerned
2017-12-12 14:59:00 -06:00
Peter Evans
7da2f9e791
Add support for setting read/write map functions
2017-12-12 14:58:06 -06:00
Peter Evans
bb92162dba
Zero, not NULL.
...
Not that there's a practical difference, but we should be clear that
we're zeroing out memory because its contents are vm_8bit values, not
pointers.
2017-12-12 14:45:48 -06:00
Peter Evans
da62ac4ca6
Use double-slash comments
2017-12-12 14:35:13 -06:00
Peter Evans
6f4627802f
We should also NULL out segment memory.
...
Er... oops
2017-12-12 14:33:55 -06:00
Peter Evans
06705f21fc
Add mallocs for read/write tables, NULL-out code
2017-12-12 14:32:32 -06:00
Peter Evans
daab8a7f58
Add instruction strings (mapped to enum symbols)
2017-12-11 21:03:16 -06:00
Peter Evans
850fdc55b5
Add error codes to segment functions
2017-12-09 15:16:56 -06:00
Peter Evans
f44b029083
We need to check P's value as well
...
This test broke once we began to (properly) push P onto the stack.
However, I'm not _clear_ on whether we should push P before or after we
set the INTERRUPT bit... We'll go with things as-is for now.
2017-12-09 14:50:33 -06:00
Peter Evans
3954b1647f
Missing status modifications in a number of instructions
2017-12-08 23:26:46 -06:00
Peter Evans
b0aa6d400a
We should be pushing and popping status
2017-12-08 23:24:58 -06:00
Peter Evans
0336fe7366
Documentation for files
2017-12-08 22:12:31 -06:00
Peter Evans
50563b44a2
Close any open files we have
2017-12-08 17:09:58 -06:00
Peter Evans
cf62694ef0
Add option parsing code, tests
2017-12-08 17:06:21 -06:00
Peter Evans
8cd9c5ffab
Documentation, lacking
2017-12-06 21:25:47 -06:00
Peter Evans
ccd7a3f665
Moar documentation
2017-12-06 18:01:13 -06:00
Peter Evans
fca069d5de
Documentation
2017-12-06 17:16:20 -06:00
Peter Evans
12d0e5403a
Add documentation for the arith instructions
2017-12-06 17:03:37 -06:00
Peter Evans
d0dad61db8
Better documentation; use a macro to define modes
2017-12-06 16:54:14 -06:00
Peter Evans
102378640a
Proper indentation
2017-12-06 16:45:16 -06:00
Peter Evans
ffd2550364
Better documentation; log to stdout
2017-12-06 16:43:30 -06:00
Peter Evans
98f70e0a9a
Add functions for pressing/releasing keys
2017-12-06 15:21:39 -06:00