2023-09-26 - Create note
This commit is contained in:
parent
a09fc19567
commit
562ba47cb5
|
|
@ -0,0 +1,48 @@
|
||||||
|
# 2023-09-26 — Dev notes
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
|
||||||
|
- [ ] Review yesterday's notes on extended addressing
|
||||||
|
- [ ] Add tape drive to mainframe
|
||||||
|
- [ ] Add notes on re-arranging extended system docs
|
||||||
|
|
||||||
|
## Start/Reset notes
|
||||||
|
|
||||||
|
Idea/observation: if the processor begins execution at $FE (say),
|
||||||
|
and instruction $00 is NOP, then after a few NOPs the instruction
|
||||||
|
pointer will overflow and execution will continue at address $00.
|
||||||
|
|
||||||
|
...which means that we can just pretend that it startts at $00,
|
||||||
|
but also have the option to add ROM at the top of memory, and have
|
||||||
|
a JMP at the top that redirects execution to somewhere else in ROM.
|
||||||
|
|
||||||
|
### 6502 Start/Reset
|
||||||
|
|
||||||
|
https://www.masswerk.at/6502/6502_instruction_set.html:
|
||||||
|
|
||||||
|
> Start/Reset Operations
|
||||||
|
>
|
||||||
|
> An active-low reset line allows to hold the processor in a known disabled
|
||||||
|
state, while the system is initialized. As the reset line goes high, the
|
||||||
|
processor performs a start sequence of 7 cycles, at the end of which the
|
||||||
|
program counter (PC) is read from the address provided in the 16-bit reset
|
||||||
|
vector at $FFFC (LB-HB). Then, at the eighth cycle, the processor transfers
|
||||||
|
control by performing a JMP to the provided address.
|
||||||
|
Any other initializations are left to the thus executed program. (Notably,
|
||||||
|
instructions exist for the initialization and loading of all registers, but
|
||||||
|
for the program counter, which is provided by the reset vector at $FFFC.)
|
||||||
|
|
||||||
|
|
||||||
|
## Simulator memory management
|
||||||
|
|
||||||
|
To support ROM, I think this is the best plan:
|
||||||
|
|
||||||
|
- Create a new module that provides a "memory manager",
|
||||||
|
that contains the actual memory plus a set of annotations
|
||||||
|
indicating which parts are RAM and which are ROM
|
||||||
|
- When instantiating the CPU, the simulator provides it with
|
||||||
|
an instance of the memory manager
|
||||||
|
- The memory manager has a `.write(startingAddress, bytes)` method
|
||||||
|
— and it just does nothing when the address is in ROM
|
||||||
|
- (The memory manager might also need to provide some way of
|
||||||
|
attaching memory-mapped peripherals...)
|
||||||
Loading…
Reference in New Issue