annotate simple_console.txt @ 46:51672bd41cdd

Rework data segment setup to allow a stack segment and to add space for push and pop instructions
author Michael Pavone <pavone@retrodev.com>
date Tue, 30 Aug 2016 20:50:54 -0700
parents 6e7bfe83d2b0
children c44170825b16
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1 Key:
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
2 1 = literal 1 bit
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
3 0 = literal 0 bit
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
4 O = opcode bit
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
5 D = destination register bit
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
6 A = source A register bit
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
7 B = source B register bit
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
8
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
9 DDDD AAAA BBBB OOOO
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
10
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
11 0: ldim
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
12 D = destination reg
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
13 A and B form 8-bit immediate value
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
14 1: ldimh
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
15 D = destination reg
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
16 A and B form 8-bit immediate value
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
17 2: ld8
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
18 3: ld16
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
19 4: str8
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
20 5: str16
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
21 6: add
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
22 7: adc
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
23 8: and
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
24 9: or
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
25 A: xor
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
26 B: lsl
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
27 C: lsr
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
28 D: asr
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
29 E: bcc
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
30 F: single source
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
31
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
32
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
33
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
34 DDDD AAAA OOOO 1111
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
35
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
36 single source
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
37
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
38 0: mov
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
39 1: neg
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
40 2: not
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
41 3: cmp
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
42 4: call
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
43 A = register containing pointer to function
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
44 D = register that will store PC value
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
45 5: swap
43
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
46 6: longjmp
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
47 A = register containing pointer to function
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
48 D = register containing new code segment value
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
49 7: ini
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
50 8: outi
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
51 9: addi
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
52 A: andi
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
53 B: ori
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
54 C: xori
0
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
55 D: ls[lr]i
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
56 MSB of AAAA determines direction
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
57 LS 3 bits determines magnitude
2
6204c81e2933 Revert changes to handling of immediate versions of bitwise instructions. Replace asri with cmpi.
Michael Pavone <pavone@retrodev.com>
parents: 0
diff changeset
58 E: cmpi
0
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
59 F: single reg
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
60
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
61
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
62 DDDD OOOO 1111 1111
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
63
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
64 0: reti - return from interrupt, D = register to restore from uer
43
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
65 1: trapi
46
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
66 2: push
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
67 3: pop
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
68 4: getpch
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
69 5: setpch
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
70 6: getepc
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
71 7: setepc
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
72 8: getesr
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
73 9: setesr
43
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
74 A: getuer
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
75 B: setuer
46
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
76 C: getenum
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
77 D: setenum
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
78 E: getvbr
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
79 F: setvbr
0
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
80
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
81
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
82 Registers:
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
83
46
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
84 r0 - r11 : general purpose
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
85 r12 : Data Banks - Holds the upper bytes used for data accesses (MSB = byte for lower half of memory space, LSB = byte for upper half of memory space)
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
86 r13 : stack register
0
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
87 r14 : PC
46
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
88 r15 : status register, Stack MSB
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
89 Layout: XSSS SSSS XXXN CZ10
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
90 S = Stack most significant bits
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
91 N = Negaitve flag
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
92 C = Carry flag
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
93 Z = Zero flag
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
94 1 = Interrupt 1 enable
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
95 0 = Interrupt 0 enable
0
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
96
3
08b69e3f9f17 Fleshed out the video hardware design somewhat
Michael Pavone <pavone@retrodev.com>
parents: 2
diff changeset
97 Special Registers
46
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
98 pch - PC High - Low byte stores current PC High value, Upper byte stores saved PC High value when entering an exception handler
3
08b69e3f9f17 Fleshed out the video hardware design somewhat
Michael Pavone <pavone@retrodev.com>
parents: 2
diff changeset
99 epc - Exception PC - Stores PC value to resume to when entering an exception handler
08b69e3f9f17 Fleshed out the video hardware design somewhat
Michael Pavone <pavone@retrodev.com>
parents: 2
diff changeset
100 esr - Exception SR - same as above, but for SR
08b69e3f9f17 Fleshed out the video hardware design somewhat
Michael Pavone <pavone@retrodev.com>
parents: 2
diff changeset
101 eur - Exceptuion User Reg - reg for temporary storage of a reg in a handler, intended to be used for the stack pointer
08b69e3f9f17 Fleshed out the video hardware design somewhat
Michael Pavone <pavone@retrodev.com>
parents: 2
diff changeset
102 enum - Exception Number - holds the number of the most recent exception
46
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
103 vbr - Vector Base Register - Base address in page 0 of vector table
3
08b69e3f9f17 Fleshed out the video hardware design somewhat
Michael Pavone <pavone@retrodev.com>
parents: 2
diff changeset
104
0
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
105 IO: Ports
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
106
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
107 0: Controller 1
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
108 1: Controller 2
27
351a0d0cce3b Updated spec to make the 3rd and 4th controller IO ports as reserved
Michael Pavone <pavone@retrodev.com>
parents: 25
diff changeset
109 2: Reserved
351a0d0cce3b Updated spec to make the 3rd and 4th controller IO ports as reserved
Michael Pavone <pavone@retrodev.com>
parents: 25
diff changeset
110 3: Reserved
0
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
111
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
112 4: Channel A Freq
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
113 Load value for a 16-bit down-counter
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
114 Polarity of output is switched on transition from 1 to 0
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
115 Value is loaded on cycles where counter is 0
43
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
116 Special case value of 0 in this register forces polarity to positive, useful for PCM playback
0
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
117 5: Channel B Freq
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
118 6: Channel C Freq
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
119 7: Channel D Freq
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
120
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
121 8: Channel A/B Vol
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
122 9: Channel C/D Vol
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
123
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
124 A: Timer Freq
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
125 B: "Serial" Debug Port
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
126
43
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
127 C: Framebuffer start offset : Read Vertical Position
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
128 D: Graphics mode : Read Horizontal Position
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
129 EDVP PSSS SSEE EEEF
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
130 E = 0 display disabled, 1 display enabled
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
131 D = 0 4 bpp, 1 8bpp
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
132 F = 0 front buffer is lower 64K, 1 front buffer is upper 64K
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
133 P = palette select
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
134 S = blanked lines at start of frame
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
135 E = blanked lines at end of frame
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
136 E: CRAM update port : Read Status
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
137 1st write determines destination and length
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
138 DDDD DDDD LLLL LLLL
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
139 Next L writes are written to D and subsequent addresses
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
140
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
141 F: Reserved
3
08b69e3f9f17 Fleshed out the video hardware design somewhat
Michael Pavone <pavone@retrodev.com>
parents: 2
diff changeset
142
08b69e3f9f17 Fleshed out the video hardware design somewhat
Michael Pavone <pavone@retrodev.com>
parents: 2
diff changeset
143
43
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
144 Video Hardware:
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
145 128KB of VRAM organized into two 64KB linear framebuffers
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
146 Pixels are 4bpp or 8bbp in chunky format
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
147 256 words of 16-bit CRAM
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
148 In 4bpp mode, P field of graphics mode selects one of 4, 16 color palettes
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
149 S and E fields of mode allow hardware letter boxing, effectively increasing the length of vblank
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
150 F field selects which 64KB framebuffer is used for the active display
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
151 Active buffer is inaccessible to CPU, but CPU has free reign over inactive buffer
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
152 H-Counter goes from 0-415 and then wraps back to zero
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
153 V-Counter goes from 0-261 and then wraps back to zero
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
154 V-Counter increments when H-Counter wraps
3
08b69e3f9f17 Fleshed out the video hardware design somewhat
Michael Pavone <pavone@retrodev.com>
parents: 2
diff changeset
155
43
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
156 Memory Map
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
157 23-bit address space
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
158 $0 - $3FFFFF - ROM
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
159 $400000 - $4FFFFF - 128K RAM, mirrored every 128KB
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
160 $500000 - $6FFFFF - Reserved
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
161 $700000 - $7FFFFF - 64KB VRAM back buffer, mirrored every 64KB
46
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
162
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
163 Banking/Segments:
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
164 Code Segment: 64KB, used for instruction fetch and PC-relative load/stores
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
165 Stack Segment: 64KB, used for push/pop and SP-relative load/stores
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
166 Upper Data Segment: 32KB, used for load/stores to addresses in the upper half of the 16-bit address space
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
167 Lower Data Segment: 32KB, used for load/stores to addresses in the lower half of the 16-bit address space
3
08b69e3f9f17 Fleshed out the video hardware design somewhat
Michael Pavone <pavone@retrodev.com>
parents: 2
diff changeset
168
46
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
169 23-bit address generation details:
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
170 Code segment
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
171 r14 (aka PC) is used for the low 16 bits of the address and PCH is used for the upper 7 bits
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
172 Stack Segment
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
173 r13 (aka SP) is used for the low 16 bits of the address and the upper byte of SR is used for
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
174 the upper 7-bits. Note that for a load/store that uses both PC and SP, the code segment is used
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
175 Data segments
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
176 The low 15-bits of the computed 16-bit address are used directly. The most significant bit
51672bd41cdd Rework data segment setup to allow a stack segment and to add space for push and pop instructions
Michael Pavone <pavone@retrodev.com>
parents: 43
diff changeset
177 selects a data segment and then the relevant byte of r12 is used for the upper 8 bits
3
08b69e3f9f17 Fleshed out the video hardware design somewhat
Michael Pavone <pavone@retrodev.com>
parents: 2
diff changeset
178 26.112 MHZ Clock
08b69e3f9f17 Fleshed out the video hardware design somewhat
Michael Pavone <pavone@retrodev.com>
parents: 2
diff changeset
179 Dot Clock Divider 4
43
6e7bfe83d2b0 Changed the design to vastly simplify the video hardware and support a 23-bit address space on the CPU
Michael Pavone <pavone@retrodev.com>
parents: 27
diff changeset
180 CPU Clock Divider 4 (assuming 1 cycle/instruction, 1 for 4 cycles/instruction)
3
08b69e3f9f17 Fleshed out the video hardware design somewhat
Michael Pavone <pavone@retrodev.com>
parents: 2
diff changeset
181 Audio Timer Divider 34
08b69e3f9f17 Fleshed out the video hardware design somewhat
Michael Pavone <pavone@retrodev.com>
parents: 2
diff changeset
182 Audio Output Divider 544
25
fb14515266f4 Implemented timer and timer interrupts. Added get/setvbr instructions. Fixed assembler bug. Moved mnemonics into a separate source file
Michael Pavone <pavone@retrodev.com>
parents: 5
diff changeset
183 Interrupt Timer Divider 32
3
08b69e3f9f17 Fleshed out the video hardware design somewhat
Michael Pavone <pavone@retrodev.com>
parents: 2
diff changeset
184
08b69e3f9f17 Fleshed out the video hardware design somewhat
Michael Pavone <pavone@retrodev.com>
parents: 2
diff changeset
185 Alternatively 13.056 Mhz clock and cut the dividers in half
0
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
186
7e44f7d5810b Initial commit. CPU working well enough for simple hello world program.
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
187