OpenCores
URL https://opencores.org/ocsvn/aoocs/aoocs/trunk

Subversion Repositories aoocs

[/] [aoocs/] [trunk/] [doc/] [src/] [notes.txt] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 alfik
/*
2
TODO:
3
- testbench specification
4
- on OpenCores page formating: 

make all

5
- WISHBONE datasheet: additional: maximum operand size
6
- ao68000: clean Dn, An RAM
7
*/
8
 
9
/*
10
Agnus: Address Generator Unit
11
    - Chip ram arbiter
12
        - odd clock (?) cycles: custom chips
13
        - even clock (?) cycles: CPU - 68000 can access memory every second clock cycle
14
    - color clocks: 280 ns, 281.94, one memory access cycle
15
        - 2 low resolution pixels 140 ns each
16
        - 4 high resolution pixels 70 ns each
17
        - can be synchronized to external source
18
    - DMA channels
19
    - copper: co-processor
20
        - finite state machine
21
        - executes programmed instruction stream: copper list
22
        - synchronized with video hardware
23
        - 3 states: read instruction, execute instruction, wait for beam position
24
        - reexecution at every new video frame
25
        - instructions: each four bytes
26
            - MOVE: write 16-bit value into chipset hardware register
27
            - WAIT: wait for beam position or blitter operation finish
28
            - SKIP: skip the following istruction if beam position already reached
29
        - each GUI screen can have a different resolution
30
        - S-HAM: sliced-HAM: swith palette on every scanline, improving HAM mode
31
 
32
    - blitter: block image transfer, bit blit
33
        - memory transfer
34
        - logic operation unit
35
        - 3 modes: copy memory block, fill block, line draw
36
            - copies memory images: BLOBS: blitter objects
37
            - copy direction: start-end, end-start
38
            - A,B,C sources -> D destination
39
            - width: multiple of 16 bits, height: in lines, stride: end of line to next line
40
            - barrel shift: 0 to 15 bits
41
            - BLOB: GUI windows
42
        - lines: Bresenham algorithm, single pixel thick
43
            - 16-bit repeating pattern
44
        - fill: each line from right to left
45
            - set pixel: toggle filling mode
46
*/
47
 
48
/*
49
Paula:
50
    - 4 independant DMA channels
51
        - 8-bit PCM: signed, linear, two's complement
52
        - hardware-mixed: two to left, two to right
53
    - every channel has an independent:
54
        - 65 level volume
55
        - frequency: sample rates from 20 kHz to 28867 Hz: time limit for Paula DMA ordered with video timing
56
    - audio hardware: four states machines: each having eight states
57
    - frequency or amplitude modulation
58
    - interrupts
59
    - floppy disk drive
60
        - read and write MFM or GCD data
61
        - DMA or programmed I/O
62
        - sync-on-word - $4489 for MFM
63
        - usage:
64
            - MFM encoding(3-pass) / decoding(1-pass) is usually performed by the blitter
65
            - usually one track at once, not sector-by-sector
66
    - serial port
67
        - programmed I/O only
68
        - no FIFO buffer
69
        - all possible bit rates
70
    - analog joystick
71
*/
72
 
73
/*
74
Audio notes:
75
 
76
- 1 word = 2 samples for every channel - for every line
77
- channel 1,2: left; 0,3: right;
78
- 8-bit signed samples
79
- pointer is word aligned; location and internal pointer, length also copied
80
- length: in words
81
- volume: 6 bits +1 max: 0-none, 63, 64 max
82
- frequency: clock ticks per sample; countdown - when 0 - next sample to DAC; min 123 (PAL), max 65535; when too fast - repeat sample
83
- after stop DMA - replay from start location;
84
- interrupt after copy of location and length is made - at the beginning
85
- modulate higher channel; when on - turn off audio output, even on channel 3; write new value of amplitude or period when countdown
86
    - volume: 7 bits; period: 16 bits; both: alternating volume, period
87
- lowpass filter at 7 kHz; can be disabled; min sampling rate = fmax + 7kHz; 124-256 no aliasing distortion
88
- direct mode: 1 word at a time; interrupt after these two samples; last value stays
89
*/
90
 
91
/* video notes:
92
 
93
640/16=40 fetches, 5 bitplanes x40 = 200 cycles, NTSC: 227.5 total, 226 usable, E0 = 224,
94
always: 4 memory refresh, 3 disk DMA, 4 audio DMA = 11 cycles
95
sometimes: 16 sprite DMA
96
rest: copper, blitter, 68000
97
 
98
68000 PAL: 7.09379 MHz /PAL standard=7.09375MHz/ = 2 cycles = 281.9367 ns = color cycle
99
68000 NTSC: 7.15909 MHz = 2 cycles = 279.3651 ns = color cycle
100
 
101
PAL 15.625kHz = 64 us = 227.00128 color cycles
102
PAL hsync 4.7 us, back 5.65 us, image 52 us, front 1.65 us
103
hsync = 16.67 color cycles
104
vsync = 25*64 us = 1.6 ms
105
 
106
NTSC 15.734kHz =  63.5566 us = 227.5038 color cycles
107
 
108
Displayable: 52 us, Not displayable: 12 us
109
Master PAL oscillator: 28.37516 MHz
110
PAL colorburst: 4.43361875 MHz = 5/4 * 3.546895 MHz /a500plus_sm/
111
7M: 7.09379 MHz - processor
112
C1: 3.546895 MHz - color clock
113
 
114
"Here is the solution I have found based on the ITU-601/656 standards:
115
Clock source: 27MHz.
116
27,000,000 / 429 x 455 = 28,636,363 (NTSC clock, 0 ppm)
117
27,000,000 / 432 x 454 = 28,375,000 (PAL clock, 6 ppm)"
118
http://www.opencircuits.com/Minimig_NTSC
119
 
120
"The PAL TV signal has 283.7516 color subcarrier cycles per scanline, 312.5 scanlines per field,
121
and 50 fields per second, so that gives us a color subcarrier frequency of 283.7516 * 312.5 * 50,
122
which equals 4433618.75 Hz, or 4.43361875 MHz. But the PAL Atari generates 228 color clocks per
123
scanline (the same as the NTSC Atari), and then it converts those 228 color clocks into a PAL signal.
124
Note that the PAL Atari's 228 color clocks per scanline are *not* drawn at the NTSC rate
125
(which is roughly 3579545 Hz). I'm not sure about the PAL Atari numbers, but I *think* that each of the
126
228 color clocks (which are neither NTSC color clocks nor PAL color clocks) have a rate of
127
283.7516 * 312.5 * 50 * 4 / 5 (or four-fifths the rate of a PAL color clock), which equals 3546895 Hz, or 3.546895 MHz.
128
Assuming the above formula is correct, you can calculate the exact PAL Atari framerate as
129
FR = 283.7516 * 312.5 * 50 * 4 / 5 / 228 / SL. So a 312-line frame has a framerate of approximately 49.86076 Hz."
130
http://atari2600.org/pipermail/stella/2008-May/020514.html
131
 
132
Characteristics
133
B,G/PAL
134
Number of lines per picture (frame): 625
135
Field frequency, nominal value (fields/s): 50
136
Line frequency (Hz): 15625±0.0001%
137
Nominal line period (µs): 64
138
Line-blanking interval (µs): 12±0.3
139
"Active" scanlines per field : 287.5 (288)
140
http://lipas.uwasa.fi/~f76998/video/modes/
141
 
142
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
143
 
144
Vertical PAL:
145
Vertical blank: 0 - 29 ($1D)
146
Displayable no LACE: 312.5 - 29 = 283.5 = 283
147
Displayable LACE:    625 - (29*2) = 567
148
Limit VSTART: 0-255
149
Normal VSTART: 44 ($2C) - PAL+NTSC
150
Limit VSTOP /complement MSB/: 128 ($80) to 383-256=127 ($17F,$7F)
151
Normal VSTOP: 300-256=44 ($12C,2C) - PAL, $F4 for NTSC
152
 
153
Horizontal:
154
DDF: 4 lowres pixel resolution = 1.0 color clock, recommended 16 pixel resolution, PAL+NTSC;
155
DW: always lowres non-interlace, 1 lowres pixel resolution = 0.5 color clock
156
HW DDFSTRT limit: 24 ($18)
157
HW DDFSTOP limit: 216 ($D8) --> 192 color clocks, for PAL+NTSC; but custom.c says: HARD_DDF_STOP = 0xD4
158
25 lowres word/bitmap fetches, 49 hires word/bitmap fetches (on $D8 only one word fetch)
159
horizontal blanking limits to 23 lowres words/bitmap = 368 lowres pixels
160
Normal lowres DDFSRT: 56 ($38) = $81/2-8.5=$38, below: disables some sprites; DDFSTOP: 208 ($D0)
161
Normal hires DDFSRT: 60 ($3C) = $81/2-4.5=$3C; DDFSTOP: 212 ($D4)
162
 
163
DDFSTOP - DDFSTRT = (8(fetches per word) * (word/bitmap count - 1)) for low resolution
164
DDFSTOP - DDFSTRT = (4(fetches per word) * (word/bitmap count - 2)) for high resolution
165
 
166
160 = 4x40; 640 = 16x40; 160 = 4x(640/16)
167
 
168
Limit HSTART: 0 to 255; HSTOP: /-256/: 256=0 to 511-256=255
169
Normal HSTART: 129 ($81) - PAL+NTSC; HSTOP: 449-256=193 ($1C1,$C1) - PAL+NTSC
170
 
171
Horizontal blank limit = Displayable: 368 lowres pixels = 23 words/bitmap = 184 color clocks =  - PAL+NTSC
172
 
173
1 word fetch = 1 color clock
174
4.5 color clock from first fetch to disply
175
 
176
VPOSR: identification bits
177
http://www.winnicki.net/amiga/memmap/VPOSR.html
178
 
179
*********
180
audio maximum sampling rate: PAL: 28,867 samples/s, 123 ticks/sample
181
*/
182
 
183
/*
184
Denise:
185
    - video: no overlay:
186
        - lowres: 320x256
187
        - hires: 640x256
188
    - interlace: double vertical size
189
    - wide overscan: no border around graphics
190
    - can be synchronized to external source: genlock
191
        - 1-bit output: is Amiga generating backround color or not
192
    - bitplanes: 1 to 5
193
        - fetch bits and perform color lookup
194
    - palette of 4096 colors
195
    - 6th bitplane for:
196
        - Extra-Halfbright mode: if pixel set: brightness of regular 32 color pixel is halved
197
        - Hold and Modify mode, 4096 colors on screen at once, 6-bit pixel: 2-bit control + 4-bit data:
198
            - set(data - regular color lookup)
199
            - modify-red, modify-green, modify-blue (data - modify that component, leave rest unchanged)
200
        - dual-playfield: two playfields with 8 colors each
201
            - drawn on top of each other
202
            - independant scrolling
203
            - backround color of top field displays bottom field
204
    - 8 sprites on top of graphics
205
        - detect collision between: sprites, sprites and bachground
206
        - 3 visible colors and one transparent
207
        - attached sprites: 2 sprites attached making a single 15 color sprite
208
    - sub-pixel scrolling
209
    - mouse and joystick input
210
*/
211
 
212
/* Floppy notes:
213
 
214
ID shift register:
215
1) motor on -> off
216
2) SEL* inactive
217
3) SEL* inactive -> SEL* active -> read RDY* ->
218
MSB first, inversion needed to get $FFFF FFFF Amiga drive ID
219
 
220
fl_rdy_n: motor full speed - only when fl_mtr_n active OR id mode
221
fl_chg_n: inactive when reset or no floppy, active when selected and step
222
fl_wpro_n: asserted when selected
223
fl_tk0_n: asserted when slected and head over track 0
224
fl_index_n: once per revolution, between sectors
225
 
226
fl_mtr_n: clocked on SEL* inactive -> SEL* active, LED control
227
fl_side_n: inactive: side 0, active: side 1
228
fl_step_n: selected drive step pulse
229
fl_dir: inactive: higher tracks, active: lower tracks, seperate write than fl_step_n
230
 
231
floppy_syn_irq - always on sync word, independent of adk_con
232
floppy_blk_irq - DMA complete
233
 
234
DMA read and write one track every revolution
235
Synchronize CPU with specific data
236
Read single bytes
237
 
238
adk_con
239
    [14:13] precompensation,                                                                    not used
240
    [12]    0 - GCR precompensation, 1 - MFM precompensation, only MFM supported,               not used
241
    [10]    1 - synchronize on DSKSYNC and start DMA - read from next word,
242
 
243
    [9]     1 - synchronize on MSB for GCD,                                                     not used
244
    [8]     1 - 2us for bit of MFM, 0 - 4us for bit of GCD,                                     not used
245
 
246
dskptr - address, bit 0 always 0
247
 
248
dsklen
249
    [15]    secondary DMA enable
250
    [14]    DMA write
251
            second write with [15:14] == 2'b11 starts DMA write to floppy
252
            single write with [15:14] == 2'b0X resets counter
253
            second write with [15:14] == 2'b10 starts DMA read from floppy
254
    [13:0]  number of words move
255
 
256
dskbytr
257
    [15]    1 - byte read ready, cleaned after read
258
    [14]    1 - DMA is on: in DMACON and DSKLEN
259
    [13]    dsklen[14]
260
    [12]    dsksync match, for at least 2us
261
    [7:0]   read byte
262
 
263
dsksync - sync word
264
 
265
 
266
transfer: dskptr += 2; size -= 1;
267
DMA write: last 3 bits lost
268
DMA read: last word may not be read, single byte read: always ok (?),       (implemented: always all words read)
269
 
270
80 cylinders/160 tracks
271
Track: gap (nulls) | 11 sectors
272
Sector MFM encoded:
273
 
274
odd bits of segment, even bits of segment
275
 
276
encoding: data -> MFM
277
1 -> 01
278
 
279
 
280
MFM sync mark value: $4489
281
 
282
checksum: simple XOR
283
*/
284
 
285
/* vga_eth_capture notes:
286
 
287
Send UDP packet:
288
ethernet
289
    dest mac(6), src mac(6), type(2 = 0x0800 IPv4)
290
ip
291
    version,header([1] = 0x45), tos([1] = 0x00), length([2] = 4*5 + 4*2 + len = 990 = 0x03DE)
292
    id([2] = 0x0000), flags,offset([2] = 0x40, 0x00)
293
    ttl([1] = 0x0F), protocol([1] = 0x11), header checksum([2] = 0)
294
    source ip([4])
295
    dest ip([4])
296
udp
297
    source port([2]), dest port([2])
298
    length([2] = 8 + len = 970 = 0x03CA), checksum([2] = 0)
299
data
300
    (len = line num(2) + line(640*12/8 = 960) = 962)
301
 
302
--full ethernet packet len = 990 + 14 = 1004 = 0x03EC
303
 
304
DM9000A control to send:
305
    set IMR(FFh = 0x80)
306
 
307
    set checksum reg (31h = 0x05)
308
 
309
    set early transmit (30h = 0x83) ? threshold 75%
310
 
311
    power-up PHY (1Fh = 0x00)
312
 
313
    dummy MWCDM ?
314
 
315
    DO
316
 
317
        packet I
318
        set MWCMD(F8h = 16-bit data)
319
 
320
        wait for packet II
321
        read TX(02h bit 0 == 0)
322
 
323
        set TXPLL(FCh = low byte)
324
        set TXPLH(FDh = high byte)
325
 
326
        write TX(02h 0x01)
327
 
328
        packet II
329
        set MWCMD(F8h = 16-bit data)
330
 
331
        wait for packet I
332
        read TX(02h bit 0 == 0)
333
 
334
        set TXPLL(FCh = low byte)
335
        set TXPLH(FDh = high byte)
336
 
337
        write TX(02h 0x01)
338
 
339
    LOOP
340
*/
341
 
342
/* bus_terminator notes:
343
 32'h00E80000  --> from PC: 0x00FC503A
344
 problem: PC: 0x00FCAC04, access: 0 ? -> read from ocs_video -> solved
345
 problem: PC: 0x00FE9318, access: 0 ?
346
 32'h00DFF0A4
347
 32'h00DFF008
348
 32'h00DFF034
349
 32'h00DFF014
350
 32'h00DFF0FC
351
 32'h00dc003c rtc
352
 32'h00d8003c rtc ?
353
 32'hFFFFFFFC at PC: 0x00FF5A10, while LoadWB - also in uae: 0+0xFFFFFFFF -> in 24-bit addressing ok,
354
      but in 32-bit addressing not ok
355
*/
356
 
357
/* cia8520 notes:
358
    - name: 8520(1MHz, A - 2MHz, both used in different Amiga models)
359
    - clock input: 0.709379 Mhz
360
    - peripheral interfacing:
361
        - serial I/O: internal bidirectional 8-bit shift-register
362
            - input: clocked with external source
363
            - output: clocked with internal timer
364
            - interrupt generated when transfer completed
365
        - parallel I/O: 2x 8-bit, each line: input or output, read always returned current state
366
            - two control lines: /FLAG, /PAGE coordinated multiple CIA + parallel I/O: for Centronics Port
367
    - system timers
368
        - 2 programmable interval timers with submicrosecond precision
369
        - can take input from external input: CNT
370
        - each timer has a:
371
            - 16-bit read-only register: down counter
372
            - 16-bit write-only latch
373
            - at underflow: interrupt and/or gated to second I/O port: PB6(timer A),PB7(timer B), overrides direction
374
            - modes: once, continuous
375
    - Time-of-Day clock:
376
        - 1 read/write 24-bit binary counter: read: read stop MSB, read continue LSB, write: stop MSB(?), start LSB
377
        - after reset: 1:00:00.0 (from 6526)
378
        - alarm clock: interrupt at given time
379
            - write only
380
            - at same address as TOD, selected by control bit
381
    - output: pulse pin
382
    - input: edge detection
383
    - CIA-B: even: 0: floppy control, serial control, some parallel port status
384
    - CIA-A: odd: 1: parallel port, keyboard, some floppy support, joystick and mouse buttons
385
 
386
 Diffrences:
387
 Timer A,B: CNT transitions: not transitions but pulses: as cnt_i == 1'b0
388
 pc_n == 1'b0 one cycle after port B access, not 3 cycles.
389
 serial output cnt_o
390
*/
391
 
392
/*
393
Low-Pass filter: LED-filter
394
    - analog filter
395
    - external to Paula
396
    - 12 dB/octet Butterworth low-pass filter at 3.3 kHz
397
    - applied globally to all 4 channels
398
 
399
Static low-pass filter: models before Amiga 1200
400
    - static "tone knob" type low-pass filter
401
    - enabled regardless of the optional LED-filter
402
    - 6 dB/octet low-passfilter with cut-off at 4.5 kHz or 5 kHz
403
*/
404
 
405
/*
406
Gary: A500,A2000,CDTV
407
    - glue logic for bus control
408
    - support functions for floppy drive
409
*/
410
 
411
/* ECS only
412
Agnus
413
    BLTCON0L    ~05A  W   A( E!)  Blitter control 0, lower 8 bits (minterms)
414
    BLTSIZV     ~05C  W   A( E!)  Blitter V size (for 15 bit vertical size)
415
    BLTSIZH     ~05E  W   A( E!)  Blitter H size and start (for 11 bit H size)
416
    SPRHDAT     ~078  W   A( E!)  Ext. logic UHRES sprite pointer and data id
417
    HTOTAL       1C0  W   A( E!)  Highest number count, horiz line (VARBEAMEN=1)
418
    HSSTOP       1C2  W   A( E!)  Horizontal line position for HSYNC stop
419
    HBSTRT       1C4  W   A( E!)  Horizontal line position for HBLANK start
420
    HBSTOP       1C6  W   A( E!)  Horizontal line position for HBLANK stop
421
    VTOTAL       1C8  W   A( E!)  Highest numbered vertical line (VARBEAMEN=1)
422
    VSSTOP       1CA  W   A( E!)  Vertical line position for VSYNC stop
423
    VBSTRT       1CC  W   A( E!)  Vertical line for VBLANK start
424
    VBSTOP       1CE  W   A( E!)  Vertical line for VBLANK stop
425
    BEAMCON0     1DC  W   A( E!)  Beam counter control register (SHRES,PAL)
426
    HSSTRT       1DE  W   A( E!)  Horizontal sync start (VARHSY)
427
    VSSTRT       1E0  W   A( E!)  Vertical sync start   (VARVSY)
428
    HCENTER      1E2  W   A( E!)  Horizontal position for Vsync on interlace
429
Denise
430
    DENISEID    ~07C  R   D( E!)  Chip revision level for Denise (video out chip)
431
    BPLCON3      106  W   D( E!)  Bitplane control (enhanced features)
432
    DIWHIGH      1E4  W   AD( E!) Display window -  upper bits for start, stop
433
*/
434
 
435
/* From operations:
436
 * 

Setting up the core

437
 *
438
 * 

Resetting the core

439
 *
440
 * 

Modes and states

441
 */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.