IO Pages: Difference between revisions
(in progress) |
|||
| (27 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
More detailed information is found in the [[Manuals]]. | More detailed information is found in the [[Manuals]]. | ||
== Notes == | |||
'''SRAM Address''': The VICKY can only address the system SRAM (for now, DDR3 support coming). The 1st gen hardware has 512kB (19-bit space), while the 2nd gen has 2MB (21-bit space). The 24-bit pointers used are direct addresses into the SRAM chip, regardless of how the 2MB is mapped to the CPU's/MMU's address space. For instance, Core2x has 4 separate 512kB banks at non-consecutive addresses; these 4 banks are all linear+consecutive in the SRAM, and that view must be addressed here instead of its 24-bit CPU-visible addresses. | <span id="SRAM Address>'''SRAM Address'''</span>: Raw addresses for the system SRAM chip. The VICKY can only address the system SRAM (for now, DDR3 support coming). The 1st gen hardware has 512kB (19-bit space), while the 2nd gen has 2MB (21-bit space). The 24-bit pointers used are direct addresses into the SRAM chip, regardless of how the 2MB is mapped to the CPU's/MMU's address space. For instance, Core2x has 4 separate 512kB banks at non-consecutive addresses; these 4 banks are all linear+consecutive in the SRAM, and that view must be addressed here instead of its 24-bit CPU-visible addresses. | ||
'''Model names''': Certain features are only available on certain models, and these terms are used exactly. For instance, "F256Jr" means exactly the 1st gen Jr, not the entire Jr line. | '''Model names''': Certain features are only available on certain models, and these terms are used exactly. For instance, "F256Jr" means exactly the 1st gen Jr, not the entire Jr line. | ||
<span id="BGR">'''BGR'''</span>: A 3-byte color entry in Blue, Green, Red order. | |||
<span id="BGRx">'''BGRx'''</span>: A 4-byte aligned color entry in Blue, Green, Red order, with the 4th byte unused. | |||
== IO Page 0 == | == IO Page 0 == | ||
====== $C000 Gamma Lookup ====== | |||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
| Line 17: | Line 22: | ||
|$C000 - $C0FF | |$C000 - $C0FF | ||
|$F0:0000 - $F0:00FF | |$F0:0000 - $F0:00FF | ||
|RW | |||
| | | | ||
|Blue gamma conversion table | |||
|Blue conversion table | |||
|- | |- | ||
|$C400 - $C4FF | |$C400 - $C4FF | ||
|$F0:0400 - $F0:04FF | |$F0:0400 - $F0:04FF | ||
|RW | |||
| | | | ||
|Green gamma conversion table | |||
|Green conversion table | |||
|- | |- | ||
|$C800 - $C8FF | |$C800 - $C8FF | ||
|$F0:0800 - $F0:08FF | |$F0:0800 - $F0:08FF | ||
|RW | |||
| | | | ||
|Red gamma conversion table | |||
|} | |||
Each area is 256 bytes, mapping an 8-bit value (offset) to an 8-bit value (memory value), mirrored 4 times currently to fill each 1kB address space. | |||
====== $CC00: Mouse Pointer Bitmap ====== | |||
See: [[Use the PS/2 Mouse]] | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!Description | |||
|- | |||
|$CC00 - $CCFF | |||
|$F0:0C00 - $F0:0CFF | |||
|RW | |||
| | | | ||
| | |Mouse pointer bitmap (16×16 greyscale bytes) | ||
|} | |} | ||
This is currently mirrored 4 times in $CC00 - $CFFF. | |||
=== Master Control Registers | ===== $D000: VICKY Config ===== | ||
====== $D000: Master Control Registers ====== | |||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
| Line 99: | Line 123: | ||
'''FON_SET''': Chooses font set 0 or 1 | '''FON_SET''': Chooses font set 0 or 1 | ||
====== $D002: Layers ====== | |||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
!R/W | !R/W | ||
!Name | |||
!7 | !7 | ||
!6 | !6 | ||
| Line 114: | Line 140: | ||
|- | |- | ||
|$D002 | |$D002 | ||
|$F0:1002 | |||
|RW | |||
| | | | ||
|— | |— | ||
| colspan="3" |Layer 1 | | colspan="3" |Layer 1 | ||
| Line 122: | Line 149: | ||
|- | |- | ||
|$D003 | |$D003 | ||
|$F0:1003 | |||
|RW | |||
| | | | ||
|— | |— | ||
|— | |— | ||
| Line 130: | Line 158: | ||
|— | |— | ||
| colspan="3" |Layer 2 | | colspan="3" |Layer 2 | ||
|- | |- | ||
| | | | ||
| | | | ||
| | | | ||
| | |Values | ||
| | | colspan="8" |0-2: Bitmap 0-2 | ||
4-6: Tilemap 0-2 | |||
|} | |} | ||
====== $D004: Border ====== | |||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
| Line 174: | Line 183: | ||
|- | |- | ||
|$D004 | |$D004 | ||
| | |$F0:1004 | ||
|RW | |RW | ||
|BRDR_CTRL | |BRDR_CTRL | ||
| Line 185: | Line 194: | ||
|- | |- | ||
|$D005 | |$D005 | ||
| | |$F0:1005 | ||
|RW | |RW | ||
|BRDR_BLUE | |BRDR_BLUE | ||
| Line 191: | Line 200: | ||
|- | |- | ||
|$D006 | |$D006 | ||
| | |$F0:1006 | ||
|RW | |RW | ||
|BRDR_GREEN | |BRDR_GREEN | ||
| Line 197: | Line 206: | ||
|- | |- | ||
|$D007 | |$D007 | ||
| | |$F0:1007 | ||
|RW | |RW | ||
|BRDR_RED | |BRDR_RED | ||
| Line 203: | Line 212: | ||
|- | |- | ||
|$D008 | |$D008 | ||
| | |$F0:1008 | ||
|RW | |RW | ||
|BRDR_WIDTH | |BRDR_WIDTH | ||
| Line 212: | Line 221: | ||
|- | |- | ||
|$D009 | |$D009 | ||
| | |$F0:1009 | ||
|RW | |RW | ||
|BRDR_HEIGHT | |BRDR_HEIGHT | ||
| Line 220: | Line 229: | ||
| colspan="5" |SIZE_Y | | colspan="5" |SIZE_Y | ||
|} | |} | ||
====== $D00D: Background ====== | |||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
| Line 236: | Line 246: | ||
|- | |- | ||
|$D00D | |$D00D | ||
| | |$F0:100D | ||
|RW | |RW | ||
|BGND_BLUE | |BGND_BLUE | ||
| Line 242: | Line 252: | ||
|- | |- | ||
|$D00E | |$D00E | ||
| | |$F0:100E | ||
|RW | |RW | ||
|BGND_GREEN | |BGND_GREEN | ||
| Line 248: | Line 258: | ||
|- | |- | ||
|$D00F | |$D00F | ||
| | |$F0:100F | ||
|RW | |RW | ||
|BGND_RED | |BGND_RED | ||
| colspan="8" |Background color Red component | | colspan="8" |Background color Red component | ||
|} | |} | ||
====== $D010: Text Cursor ====== | |||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
| Line 269: | Line 280: | ||
|- | |- | ||
|$D010 | |$D010 | ||
| | |$F0:1010 | ||
|RW | |RW | ||
|CCR | |CCR | ||
|— | |||
|— | |||
|— | |||
|— | |||
|FLASH_DIS | |||
| colspan="2" |RATE | |||
|ENABLE | |||
|- | |||
| | | | ||
| | | | ||
| | | | ||
| | |RATE | ||
| colspan="8" |0: 1 second | |||
| colspan=" | 1: 1/2 second | ||
2: 1/4 second | |||
3: 1/8 second | |||
|- | |- | ||
|$D012 | |$D012 | ||
| | |$F0:1012 | ||
|RW | |RW | ||
|CCH | |CCH | ||
| colspan="8" |Cursor character code | | colspan="8" |Cursor character code | ||
|- | |- | ||
|$D014 | |$D014 | ||
| | |$F0:1014 | ||
|RW | |RW | ||
|CURX | |CURX | ||
| colspan="8" |Cursor X position (16-bit) | | colspan="8" |Cursor X position (16-bit) | ||
|- | |- | ||
|$D016 | |$D016 | ||
| | |$F0:1016 | ||
|RW | |RW | ||
|CURY | |CURY | ||
| colspan="8" |Cursor Y position (16-bit) | | colspan="8" |Cursor Y position (16-bit) | ||
|} | |} | ||
====== $D018: Raster ====== | |||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
| Line 330: | Line 334: | ||
!0 | !0 | ||
|- | |- | ||
|$D018 | |$D018 | ||
| | |$F0:1018 | ||
|R | |R | ||
|RAST_COL | |RAST_COL | ||
| colspan="8" |Raster current column (12-bit) | | colspan="8" |Raster current column (12-bit) | ||
|- | |- | ||
|$D01A | |$D01A | ||
| | |$F0:101A | ||
|R | |R | ||
|RAST_ROW | |RAST_ROW | ||
| Line 343: | Line 347: | ||
|- | |- | ||
|$D018 | |$D018 | ||
| | |$F0:1018 | ||
|W | |W | ||
|LINT_CTRL | |LINT_CTRL | ||
| | |— | ||
| | |— | ||
| | |— | ||
| | |— | ||
| | |— | ||
| | |— | ||
| | |— | ||
|ENABLE | |ENABLE | ||
|- | |- | ||
|$D019 | |$D019 | ||
| | |$F0:1019 | ||
|W | |W | ||
|LINT_L | |LINT_L | ||
| Line 362: | Line 366: | ||
|} | |} | ||
=== | ===== $D100: Bitmaps ===== | ||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
| Line 379: | Line 382: | ||
|- | |- | ||
|$D100 | |$D100 | ||
|$F0:1100 | |||
| | | | ||
| | | | ||
| colspan="8" |Bitmap 0 | |||
|- | |||
|$D108 | |||
|$F0:1108 | |||
| | | | ||
| | | | ||
| colspan="8" |Bitmap 1 | |||
|- | |||
|$D110 | |||
|$F0:1110 | |||
| | | | ||
| | | | ||
| colspan="8" |Bitmap 2 | |||
|- | |||
| | |||
| +0 | |||
|RW | |||
| | | | ||
|— | |||
|— | |||
|— | |||
|— | |||
|— | |||
| colspan="2" |CLUT | | colspan="2" |CLUT | ||
|ENABLE | |ENABLE | ||
|- | |- | ||
| | | | ||
| +1 | |||
|RW | |RW | ||
| | | | ||
| colspan="8" |SRAM Address of | | colspan="8" |[[IO Pages#SRAM Address|SRAM Address]] of pixels (24-bit) | ||
|} | |||
===== $D200: Tilemaps ===== | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |- | ||
|$ | |$D200 | ||
|$F0:1200 | |||
| | | | ||
| | | | ||
| colspan="8" |Tilemap 0 | |||
|- | |||
|$D20C | |||
|$F0:120C | |||
| | | | ||
| | | | ||
| colspan="8" |Tilemap 1 | |||
|- | |||
|$D218 | |||
|$F0:1218 | |||
| | | | ||
| | | | ||
| colspan="8" |Tilemap 2 | |||
| colspan=" | |||
|- | |- | ||
| | | | ||
| | | +$00 | ||
|W | |||
| | | | ||
| | |— | ||
|— | |||
|— | |||
|TILE_SIZE_8 | |||
|— | |||
|— | |||
|— | |||
|ENABLE | |||
|- | |- | ||
| | | | ||
| | | +$01 | ||
|W | |||
| | | | ||
| colspan="8" |[[IO Pages#SRAM Address|SRAM Address]] of tile map entries (24-bit) | |||
|- | |||
| | | | ||
| +$04 | |||
|W | |||
| | | | ||
| colspan="8" |MAP_SIZE_X (8-bit) | |||
|- | |||
| | | | ||
| +$06 | |||
|W | |||
| | | | ||
| colspan="8" |MAP_SIZE_Y (8-bit) | |||
| colspan=" | |||
|- | |- | ||
| | | | ||
| | | +$08 | ||
|W | |||
| | | | ||
| colspan=" | | colspan="4" |X[3:0] | ||
| colspan="4" |SSX | |||
|- | |||
| | |||
| +$09 | |||
|W | |||
| | |||
|— | |||
|— | |||
| colspan="6" |X[9:4] | |||
|- | |||
| | |||
| +$0A | |||
|W | |||
| | |||
| colspan="4" |Y[3:0] | |||
| colspan="4" |SSY | |||
|- | |||
| | |||
| +$0B | |||
|W | |||
| | |||
|— | |||
|— | |||
|— | |||
|— | |||
| colspan="4" |Y[7:4] | |||
|} | |} | ||
=== | ====== $D280: Tilesets ====== | ||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
| Line 448: | Line 530: | ||
!0 | !0 | ||
|- | |- | ||
|$ | |$D280 | ||
|$F0:1280 | |||
| | | | ||
| | | | ||
| colspan="8" |Tileset 0 | |||
| colspan="8" | | |||
|- | |- | ||
|$ | |$D284 | ||
|$F0:1284 | |||
| | | | ||
| | |||
| colspan="8" |Tileset 1 | |||
|- | |||
|$D288 | |||
|$F0:1288 | |||
| | | | ||
| | | | ||
| colspan="8" | | | colspan="8" |Tileset 2 | ||
|- | |- | ||
|$ | |$D28C | ||
|$F0:128C | |||
| | | | ||
| | | | ||
| colspan="8" |Tileset 3 | |||
| colspan="8" | | |||
|- | |- | ||
|$ | |$D290 | ||
| | |$F0:1290 | ||
| | | | ||
| | | | ||
| colspan="8" |Tileset 4 | |||
|- | |||
|$D294 | |||
|$F0:1294 | |||
| | | | ||
| | | | ||
| | | colspan="8" |Tileset 5 | ||
|- | |||
|$D298 | |||
|$F0:1298 | |||
| | | | ||
| | | | ||
| colspan="8" |Tileset 6 | |||
|- | |||
|$D29C | |||
|$F0:129C | |||
| | | | ||
| | | | ||
| colspan="8" | | | colspan="8" |Tileset 7 | ||
|- | |- | ||
| | | | ||
| | | +0 | ||
|W | |W | ||
| | | | ||
| colspan="8" | | | colspan="8" |[[IO Pages#SRAM Address|SRAM Address]] of tile pixels (24-bit) | ||
|- | |- | ||
| | | | ||
| | | +3 | ||
|W | |W | ||
| | | | ||
|— | |— | ||
|— | |— | ||
|— | |— | ||
|— | |||
|SQUARE | |||
|— | |— | ||
|— | |— | ||
|— | |— | ||
|} | |} | ||
===== $D400: Sound ===== | |||
====== $D400: SID chips ====== | |||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
| Line 550: | Line 615: | ||
!0 | !0 | ||
|- | |- | ||
|$ | |$D400 | ||
|$F0:1400 | |||
| | | | ||
| | | | ||
| colspan="8" |Left SID | |||
| colspan="8" | | |||
|- | |- | ||
|$ | |$D500 | ||
|$F0:1500 | |||
| | | | ||
| | | | ||
| colspan="8" |Right SID | |||
|- | |||
| | | | ||
| colspan="8" | | | +$00 | ||
|W | |||
|Voice 1 | |||
| colspan="8" |Frequency (16-bit) | |||
|- | |- | ||
| | | | ||
| +$02 | |||
|W | |||
| | | | ||
| colspan="8" |Pulse width (12-bit) | |||
| colspan="8" | | |||
|- | |- | ||
| | | | ||
| +$04 | |||
|W | |||
| | | | ||
| | |NOISE | ||
| | |PULSE | ||
|SAW | |||
|TRI | |||
|TEST | |||
|RING | |||
|SYNC | |||
|GATE | |||
|- | |- | ||
| | | | ||
| +$05 | |||
|W | |||
| | | | ||
| | | colspan="4" |ATTACK | ||
| colspan=" | | colspan="4" |DELAY | ||
|- | |- | ||
| | | | ||
| +$06 | |||
|W | |||
| | | | ||
| colspan="4" |SUSTAIN | |||
| colspan="4" |RELEASE | |||
|- | |||
| | | | ||
| colspan="8" | | | +$07 | ||
|W | |||
|Voice 2 | |||
| colspan="8" |Frequency (16-bit) | |||
|- | |- | ||
| | | | ||
| +$09 | |||
|W | |||
| | | | ||
| colspan="8" |Pulse width (12-bit) | |||
| colspan="8" | | |||
|- | |- | ||
| | | | ||
| +$0B | |||
|W | |||
| | | | ||
|NOISE | |||
|PULSE | |||
|SAW | |||
|TRI | |||
|TEST | |||
|RING | |||
|SYNC | |||
|GATE | |||
|- | |||
| | | | ||
| colspan=" | | +$0C | ||
| | |W | ||
| | |||
| | | colspan="4" |ATTACK | ||
| colspan="4" |DELAY | |||
|- | |- | ||
| | | | ||
| +$0D | |||
|W | |W | ||
| | | | ||
| colspan=" | | colspan="4" |SUSTAIN | ||
| colspan="4" |RELEASE | |||
|- | |- | ||
| | | | ||
| +$0E | |||
|W | |W | ||
|Voice 3 | |||
| colspan="8" |Frequency (16-bit) | |||
|- | |||
| | | | ||
| +$10 | |||
|W | |||
| | | | ||
| colspan="8" |Pulse width (12-bit) | |||
|- | |||
| | | | ||
| +$12 | |||
|W | |||
| | |||
|NOISE | |||
|PULSE | |||
|SAW | |||
|TRI | |||
|TEST | |||
|RING | |||
|SYNC | |||
|GATE | |||
|- | |||
| | | | ||
| +$13 | |||
|W | |||
| | | | ||
| | | colspan="4" |ATTACK | ||
| colspan="4" |DELAY | |||
|- | |||
| | | | ||
| +$14 | |||
|W | |||
| | | | ||
| colspan="4" |SUSTAIN | |||
| colspan="4" |RELEASE | |||
|- | |||
| | | | ||
| | | +$15 | ||
|W | |||
| | |Misc | ||
|— | |||
|— | |||
|— | |||
|— | |||
|— | |||
| colspan="3" |FC[2:0] | |||
|- | |- | ||
| | | | ||
| +$16 | |||
|W | |||
| | | | ||
| colspan="8" |FC[10:3] | |||
| colspan="8" | | |||
|- | |- | ||
| | | | ||
| +$17 | |||
|W | |||
| | | | ||
| | | colspan="4" |RESONANCE | ||
| colspan=" | |EXT | ||
|FILTV3 | |||
|FILTV2 | |||
|FILTV1 | |||
|- | |||
| | |||
| +$18 | |||
|W | |||
| | |||
|MUTEV3 | |||
|HIGH | |||
|BAND | |||
|LOW | |||
| colspan="4" |VOLUME | |||
|} | |} | ||
====== $D580: OPL3 (NOT on F256Jr!) ====== | |||
Main page: [[Use the OPL3 YMF262]] | |||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | |||
! | !Flat | ||
!R/W | !R/W | ||
!Name | !Name | ||
| Line 670: | Line 798: | ||
!0 | !0 | ||
|- | |- | ||
| | |$D580 | ||
|$F0:1580 | |||
|W | |W | ||
| | | | ||
| colspan="8" | | | colspan="8" |Address registers for ports $000 - $0FF | ||
|- | |- | ||
| | |$D581 | ||
|$F0:1581 | |||
|W | |W | ||
| | | | ||
| colspan="8" | | | colspan="8" |Data registers for all ports | ||
|- | |- | ||
| | |$D582 | ||
|$F0:1582 | |||
|W | |W | ||
| | | | ||
| | | colspan="8" |Address register for ports $100 - $1FF | ||
| | |} | ||
| | |||
====== $D600: PSGs ====== | |||
Main page: [[Use the PSG]] | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |- | ||
| | |$D600 | ||
| | |$F0:1600 | ||
| | | | ||
| | | | ||
| colspan="8" |PSG Left | |||
|- | |||
|$D608 | |||
|$F0:1608 | |||
| | | | ||
| | | | ||
| colspan="8" |PSG Left + Right | |||
|- | |- | ||
| | |$D610 | ||
| | |$F0:1610 | ||
| | |||
| | | | ||
| colspan=" | | colspan="8" |PSG Right | ||
| | |} | ||
Stereo separation is enabled with the '''[[IO Pages#$D6A0: System Control Registers|PSG_ST]]''' flag. By default, both PSGs go to both speakers. | |||
====== $D620: CODEC ====== | |||
Main page: [[Use the CODEC]] | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |- | ||
| | |$D620 | ||
|$F0:1620 | |||
|W | |W | ||
| | | | ||
| colspan="8" | | | colspan="8" |DATA[7:0] | ||
|- | |- | ||
| | |$D621 | ||
|$F0:1621 | |||
|W | |W | ||
| | | | ||
| colspan=" | | colspan="7" |REGISTER | ||
|DATA[8] | |||
|- | |- | ||
| | |$D622 | ||
| | |$F0:1622 | ||
|R | |||
| | | | ||
| | |— | ||
| | |— | ||
| | |— | ||
| | |— | ||
| | |— | ||
| | |— | ||
| | |— | ||
| | |BUSY | ||
|- | |- | ||
| | | | ||
| | | | ||
|W | |W | ||
| | | | ||
| | |— | ||
| | |— | ||
| | |— | ||
| | |— | ||
| | |— | ||
| | |— | ||
| | |— | ||
|START | |||
|} | |||
===== $D630: System ===== | |||
| | |||
====== $D630: UART ====== | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |- | ||
| | | | ||
| | | | ||
| | | | ||
| colspan="9" |'''DLAB = 0''' | |||
|- | |- | ||
| | |$D630 | ||
|$F0:1630 | |||
|R | |||
|RXD | |||
| colspan="8" |RX_DATA | |||
|- | |||
| | |||
| | |||
|W | |W | ||
| | |TXR | ||
| colspan=" | | colspan="8" |TX_DATA | ||
|- | |- | ||
| | |$D631 | ||
| | |$F0:1631 | ||
| | |RW | ||
|IER | |||
|— | |— | ||
|— | |— | ||
|— | |— | ||
|— | |— | ||
| | |STAT | ||
| | |ERR | ||
|TXE | |||
|RXA | |||
|- | |- | ||
| | | | ||
| colspan="8" | | | | ||
| | |||
| colspan="9" |'''DLAB = 1''' | |||
|- | |||
|$D630 | |||
|$F0:1630 | |||
|RW | |||
|DL | |||
| colspan="8" |DIV (16-bit) | |||
|- | |- | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
| | | colspan="8" | | ||
| | |||
|- | |- | ||
| | |$D632 | ||
| | |$F0:1632 | ||
| | |R | ||
| | |IIR | ||
| colspan="2" |FIFO | |||
|FIFO64 | |||
|— | |||
| colspan=" | | colspan="3" |STATE | ||
| | |/PENDING | ||
| | |||
|- | |- | ||
| | | | ||
| | | | ||
|W | |W | ||
| | |FCR | ||
| colspan=" | | colspan="2" |RXT | ||
|FIFO64 | |||
|— | |||
|DMA | |||
|TXR | |||
|RXR | |||
|FIFOE | |||
|- | |- | ||
|$ | |$D633 | ||
| | |$F0:1633 | ||
| | |RW | ||
| | |LCR | ||
| colspan=" | |DLAB | ||
|— | |||
| colspan="3" |PARITY | |||
|STOP | |||
| colspan="2" |DATA | |||
|} | |} | ||
====== $D640: PS/2 ====== | |||
See: [[Use the PS/2 Mouse]] | |||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
| Line 862: | Line 1,022: | ||
!0 | !0 | ||
|- | |- | ||
|$ | |$D640 | ||
| | |$F0:1640 | ||
| | |RW | ||
| | |PS2_CTRL | ||
| | |— | ||
|— | |||
|MCLR | |||
|KCLR | |||
|M_WR | |||
|— | |||
|K_WR | |||
|— | |||
|- | |- | ||
|$ | |$D641 | ||
| | |$F0:1641 | ||
| | |RW | ||
| | |PS2_OUT | ||
| colspan="8" | | | colspan="8" |Data to keyboard | ||
|- | |- | ||
|$ | |$D642 | ||
| | |$F0:1642 | ||
| | |R | ||
| | |KBD_IN | ||
| colspan="8" | | | colspan="8" |Data in from keyboard FIFO | ||
|- | |||
|$D643 | |||
|$F0:1643 | |||
|R | |||
|MS_IN | |||
| colspan="8" |Data in from mouse FIFO | |||
|- | |||
|$D644 | |||
|$F0:1644 | |||
|R | |||
|PS2_STAT | |||
|K_AK | |||
|K_NK | |||
|M_AK | |||
|M_NK | |||
|— | |||
|— | |||
|MEMP | |||
|KEMP | |||
|} | |} | ||
====== $D650: Timers ====== | |||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
| Line 896: | Line 1,082: | ||
!0 | !0 | ||
|- | |- | ||
|$ | |$D650 | ||
| | |$F0:1650 | ||
|W | |W | ||
| | |T0_CTR | ||
| | |— | ||
|— | |||
| | |||
|— | |— | ||
|— | |— | ||
| | |UP | ||
| | |LD | ||
| | |CLR | ||
| | |EN | ||
|- | |- | ||
| | | | ||
| | | | ||
| | |R | ||
| | |T0_STAT | ||
|— | |— | ||
|— | |— | ||
| Line 933: | Line 1,106: | ||
|— | |— | ||
|— | |— | ||
| | |EQ | ||
| | |- | ||
|$D651 | |||
| | |$F0:1651 | ||
|RW | |||
|T0_VAL | |||
| colspan="8" |VAL (24-bit) | |||
|- | |- | ||
| | |$D654 | ||
|$F0:1654 | |||
|RW | |||
|T0_CMP_CTR | |||
|— | |||
|$ | |— | ||
| | |— | ||
| | |||
| | |||
| | |||
| | |||
|— | |— | ||
|— | |— | ||
|— | |— | ||
| | |RELD | ||
| | |RECLR | ||
| | |- | ||
| | |$D655 | ||
| | |$F0:1655 | ||
|RW | |||
|T0_CMP | |||
| colspan="8" |CMP (24-bit) | |||
|- | |- | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
| | |||
|- | |||
|$D658 | |||
|$F0:1658 | |||
|W | |W | ||
| | |T1_CTR | ||
| | |— | ||
| | |— | ||
|— | |||
|— | |— | ||
| | |UP | ||
| | |LD | ||
| | |CLR | ||
| | |EN | ||
|- | |- | ||
| | | | ||
| | |||
|R | |||
|T1_STAT | |||
|— | |||
|— | |||
|— | |||
|— | |||
|— | |||
|— | |||
|— | |||
|EQ | |||
|- | |||
|$D659 | |||
|$F0:1659 | |||
|RW | |||
|T1_VAL | |||
| colspan="8" |VAL (24-bit) | |||
|- | |||
|$D65C | |||
|$F0:165C | |||
|RW | |RW | ||
| | |T1_CMP_CTR | ||
| | |— | ||
|— | |— | ||
| | |— | ||
| | |— | ||
| colspan=" | |— | ||
|— | |||
|RELD | |||
|RECLR | |||
|- | |||
|$D65D | |||
|$F0:165D | |||
|RW | |||
|T1_CMP | |||
| colspan="8" |CMP (24-bit) | |||
|} | |} | ||
====== $D660: Interrupts ====== | |||
Main page: [[IRQ]], [[IRQ Programming]] | |||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
| Line 1,044: | Line 1,214: | ||
!0 | !0 | ||
|- | |- | ||
|$ | |$D660 | ||
|$F0:1660 | |||
| | | | ||
| | |INT_PENDING | ||
| | | colspan="8" |Per-interrupt flags (24-bit) | ||
| | |||
|- | |- | ||
|$ | |$D664 | ||
|$F0:1664 | |||
| | | | ||
| | |INT_POLARITY | ||
| | | colspan="8" |Per-interrupt flags (24-bit) | ||
| colspan="8" | | |- | ||
|$D668 | |||
|$F0:1668 | |||
| | |||
|INT_EDGE | |||
| colspan="8" |Per-interrupt flags (24-bit) | |||
|- | |||
|$D66C | |||
|$F0:166C | |||
| | |||
|INT_MASK | |||
| colspan="8" |Per-interrupt flags (24-bit) | |||
|- | |||
| | |||
| +0 & $01 | |||
| | |||
|INT_VKY_SOF | |||
| colspan="8" |Start of Frame interrupt (beginning of VSYNC) | |||
|- | |- | ||
| | | | ||
| | | +0 & $02 | ||
| | | | ||
| colspan="8" | | |INT_VKY_SOL | ||
| colspan="8" |Start of Line interrupt | |||
|- | |- | ||
| | | | ||
| | | +0 & $04 | ||
| | | | ||
| colspan="8" | | |INT_PS2_KBD | ||
| colspan="8" |PS/2 keyboard event | |||
|- | |- | ||
| | | | ||
| | | +0 & $08 | ||
| | | | ||
| | |INT_PS2_MOUSE | ||
| | | colspan="8" |PS/2 mouse event | ||
| | |- | ||
| | | | ||
| | | +0 & $10 | ||
| | | | ||
| | |INT_TIMER_0 | ||
| | | colspan="8" |TIMER0 has reached its target value | ||
| | |- | ||
| | |||
| | | +0 & $20 | ||
| | |||
|INT_TIMER_1 | |||
| colspan="8" |TIMER1 has reached its target value | |||
|- | |- | ||
| | | | ||
| | | +0 & $80 | ||
| | | | ||
| | |INT_CARTRIDGE | ||
| | | colspan="8" |Interrupt asserted from cartridge port | ||
| | |||
|- | |- | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
| | | colspan="8" | | ||
| | |||
|- | |- | ||
| | | | ||
| | | +1 & $01 | ||
| | | | ||
| colspan="8" | | |INT_UART | ||
| colspan="8" |The UART is ready to receive or send data | |||
|- | |- | ||
| | | | ||
| | | +1 & $10 | ||
| | | | ||
| | |INT_RTC | ||
| | | colspan="8" |Interrupt from real time clock chip | ||
| | |- | ||
| | | | ||
| | | +1 & $20 | ||
| | | | ||
| | |INT_VIA0 | ||
| | | colspan="8" |Event from the joystick VIA chip | ||
|- | |- | ||
| | | | ||
| | | +1 & $40 | ||
| | | | ||
| colspan="8" | | |INT_VIA1 | ||
| colspan="8" |Event from the keyboard VIA chip (F256k Series Only!) | |||
|- | |- | ||
| | | | ||
| +1 & $80 | |||
| | | | ||
|INT_SDC_INS | |||
| colspan="8" |SD Card has been inserted | |||
|- | |||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
| colspan="8" | | |||
|- | |||
| | | | ||
| +2 & $01 | |||
| | | | ||
|IEC_DATA_i | |||
| colspan="8" |IEC data in | |||
|- | |||
| | | | ||
| +2 & $02 | |||
| | | | ||
|IEC_CLK_i | |||
| colspan="8" |IEC clock in | |||
|- | |||
| | | | ||
| +2 & $04 | |||
| | | | ||
|IEC_ATN_i | |||
| colspan="8" |IEC attention in | |||
|- | |- | ||
| | | | ||
| | | +2 & $08 | ||
| | | | ||
| | |IEC_SREQ_i | ||
| | | colspan="8" |IEC service request in | ||
| | |} | ||
| | |||
====== $D670: DIP Switches ====== | |||
Main page: [[DIP switches]] | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |- | ||
|$D670 | |||
|$F0:1670 | |||
|R | |||
| | | | ||
| | |GAMMA | ||
|R | |USER2 | ||
| | |USER1 | ||
| | |USER0 | ||
| | | colspan="4" |BOOT | ||
| | |} | ||
====== $D680: IEC ====== | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |||
|$D680 | |||
|$F0:1680 | |||
|R | |||
|IEC_I | |||
|SRQ_i | |||
|— | |— | ||
|— | |— | ||
|ATN_i | |||
|— | |— | ||
|— | |— | ||
| | |CLK_i | ||
| | |DAT_i | ||
|- | |- | ||
|$ | |$D681 | ||
| | |$F0:1681 | ||
|RW | |RW | ||
| | |IEC_O | ||
|SRQ_o | |||
|RST_o | |||
|NMI_EN | |||
|ATN_o | |||
|— | |— | ||
|— | |— | ||
| | |CLK_o | ||
| | |DAT_o | ||
| | |} | ||
====== $D690: RTC ====== | |||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
| Line 1,234: | Line 1,432: | ||
|- | |- | ||
|$D690 | |$D690 | ||
| | |$F0:1690 | ||
|RW | |RW | ||
|Seconds | |Seconds | ||
| Line 1,242: | Line 1,440: | ||
|- | |- | ||
|$D691 | |$D691 | ||
| | |$F0:1691 | ||
|RW | |RW | ||
|Seconds Alarm | |Seconds Alarm | ||
| Line 1,250: | Line 1,448: | ||
|- | |- | ||
|$D692 | |$D692 | ||
| | |$F0:1692 | ||
|RW | |RW | ||
|Minutes | |Minutes | ||
| Line 1,258: | Line 1,456: | ||
|- | |- | ||
|$D693 | |$D693 | ||
| | |$F0:1693 | ||
|RW | |RW | ||
|Minutes Alarm | |Minutes Alarm | ||
| Line 1,266: | Line 1,464: | ||
|- | |- | ||
|$D694 | |$D694 | ||
| | |$F0:1694 | ||
|RW | |RW | ||
|Hours | |Hours | ||
| Line 1,275: | Line 1,473: | ||
|- | |- | ||
|$D695 | |$D695 | ||
| | |$F0:1695 | ||
|RW | |RW | ||
|Hours Alarm | |Hours Alarm | ||
| Line 1,284: | Line 1,482: | ||
|- | |- | ||
|$D696 | |$D696 | ||
| | |$F0:1696 | ||
|RW | |RW | ||
|Days | |Days | ||
| Line 1,293: | Line 1,491: | ||
|- | |- | ||
|$D697 | |$D697 | ||
| | |$F0:1697 | ||
|RW | |RW | ||
|Days Alarm | |Days Alarm | ||
| Line 1,302: | Line 1,500: | ||
|- | |- | ||
|$D698 | |$D698 | ||
| | |$F0:1698 | ||
|RW | |RW | ||
|Day of Week | |Day of Week | ||
| Line 1,313: | Line 1,511: | ||
|- | |- | ||
|$D699 | |$D699 | ||
| | |$F0:1699 | ||
|RW | |RW | ||
|Month | |Month | ||
| Line 1,323: | Line 1,521: | ||
|- | |- | ||
|$D69A | |$D69A | ||
| | |$F0:169A | ||
|RW | |RW | ||
|Year | |Year | ||
| Line 1,330: | Line 1,528: | ||
|- | |- | ||
|$D69B | |$D69B | ||
| | |$F0:169B | ||
|RW | |RW | ||
|Rates | |Rates | ||
| Line 1,338: | Line 1,536: | ||
|- | |- | ||
|$D69C | |$D69C | ||
| | |$F0:169C | ||
|RW | |RW | ||
|Enables | |Enables | ||
| Line 1,351: | Line 1,549: | ||
|- | |- | ||
|$D69D | |$D69D | ||
| | |$F0:169D | ||
|RW | |RW | ||
|Flags | |Flags | ||
| Line 1,364: | Line 1,562: | ||
|- | |- | ||
|$D69E | |$D69E | ||
| | |$F0:169E | ||
|RW | |RW | ||
|Control | |Control | ||
| Line 1,377: | Line 1,575: | ||
|- | |- | ||
|$D69F | |$D69F | ||
| | |$F0:169F | ||
|RW | |RW | ||
|Century | |Century | ||
| Line 1,383: | Line 1,581: | ||
| colspan="4" |1s digit | | colspan="4" |1s digit | ||
|} | |} | ||
====== $D6A0: System Control Registers ====== | |||
Main page: [[Use the LEDs]] | |||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
| Line 1,398: | Line 1,598: | ||
!0 | !0 | ||
|- | |- | ||
|$ | |$D6A0 | ||
|$F0:16A0 | |||
|W | |||
|SYS0 | |||
|RESET | |||
|— | |||
|CAP_EN | |||
|BUZZ | |||
|L1 | |||
|L0 | |||
|SD_L | |||
|PWR_L | |||
|- | |||
| | | | ||
| | | | ||
| | |R | ||
|SYS0 | |||
|— | |||
|SD_WP | |||
|SD_CD | |||
|BUZZ | |||
|L1 | |||
|L0 | |||
|SD_L | |||
|PWR_L | |||
|- | |- | ||
|$ | |$D6A1 | ||
| | |$F0:16A1 | ||
| | |RW | ||
| | |SYS1 | ||
| colspan=" | | colspan="2" |L1_RATE | ||
| colspan="2" |L0_RATE | |||
|SID_ST | |||
|PSG_ST | |||
|L1_MN | |||
|L0_MN | |||
|} | |} | ||
====== $D6A7: F256k Series LEDs ====== | |||
Main page: [[Use the LEDs#LED_Color_Registers_on_the_K_and_K2]] | |||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
| Line 1,425: | Line 1,652: | ||
!0 | !0 | ||
|- | |- | ||
|$ | |$D6A7 | ||
|$F0:16A7 | |||
|W | |||
| | | | ||
| colspan="8" |Power LED color ([[IO Pages#BGR|BGR]]) | |||
| colspan="8" | | |||
|- | |- | ||
|$ | |$D6AA | ||
|$F0:16AA | |||
|W | |||
| | | | ||
| colspan="8" |Media LED color ([[IO Pages#BGR|BGR]]) | |||
| colspan="8" | | |||
|- | |- | ||
|$ | |$D6AD | ||
|$F0:16AD | |||
|W | |||
| | | | ||
| | | colspan="8" |Shift LED color ([[IO Pages#BGR|BGR]]) | ||
| | |} | ||
| colspan=" | |||
====== $D6A7: Machine ID and FPGA Core Versions ====== | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |||
|$D6A7 | |||
|$F0:16A7 | |||
|R | |||
|MID | |||
|— | |||
|— | |||
|— | |||
| colspan="5" |[[MID codes for machine identification|Machine ID]] | |||
|- | |- | ||
|$ | |$D6A8 | ||
| | |$F0:16A8 | ||
| | |R | ||
| | |PCBID0 | ||
| colspan="8" | | | colspan="8" |ASCII character 0: "B" (See also $D6EB) | ||
|- | |- | ||
|$ | |$D6A9 | ||
| | |$F0:16A9 | ||
| | |R | ||
| | |PCBID1 | ||
| colspan="8" | | | colspan="8" |ASCII character 1: "0" | ||
|- | |- | ||
|$ | |$D6AA | ||
| | |$F0:16AA | ||
| | |R | ||
| | |CHSV | ||
| colspan="8" | | | colspan="8" |VICKY sub-version in BCD (16-bit) | ||
|- | |||
|$D6AC | |||
|$F0:16AC | |||
|R | |||
|CHV | |||
| colspan="8" |VICKY version in BCD (16-bit) | |||
|- | |- | ||
| | |$D6AE | ||
| | |$F0:16AE | ||
| | |R | ||
| | |CHN | ||
| colspan="8" | | | colspan="8" |VICKY number in BCD (16-bit) | ||
|} | |||
====== $D6E0: Mouse Pointer Control ====== | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |- | ||
|$ | |$D6E0 | ||
|$F0:16E0 | |||
|W | |||
| | | | ||
|— | |||
|— | |||
|— | |||
|— | |||
|— | |||
|— | |||
|MODE | |||
|EN | |||
|- | |||
|$D6E2 | |||
|$F0:16E2 | |||
|RW | |||
| | |||
| colspan="8" |X (16-bit) | |||
|- | |||
|$D6E4 | |||
|$F0:16E4 | |||
|RW | |RW | ||
| | | | ||
| colspan="8" | | | colspan="8" |Y (16-bit) | ||
|- | |- | ||
|$ | |$D6E6 | ||
|$F0:16E6 | |||
|W | |||
| | | | ||
| colspan="8" |PS2_BYTE_0 | |||
| colspan="8" | | |||
|- | |- | ||
|$ | |$D6E7 | ||
|$F0:16E7 | |||
|W | |||
| | | | ||
| colspan="8" |PS2_BYTE_1 | |||
| colspan="8" | | |||
|- | |- | ||
|$ | |$D6E8 | ||
|$F0:16E8 | |||
|W | |||
| | | | ||
| colspan="8" |PS2_BYTE_2 | |||
| colspan="8" | | |||
|} | |} | ||
== | ====== $D6EB: PCB Information ====== | ||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
!R/W | !R/W | ||
!Name | !Name | ||
! | !7 | ||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |||
|$D6EB | |||
|$F0:16EB | |||
|R | |||
|PCBMA | |||
| colspan="8" |PCB Major Rev (ASCII) | |||
|- | |||
|$D6EC | |||
|$F0:16EC | |||
|R | |||
|PCBMI | |||
| colspan="8" |PCB Minor Rev (ASCII) | |||
|- | |||
|$D6ED | |||
|$F0:16ED | |||
|R | |||
|PCBD | |||
| colspan="8" |PCB Day (BCD) | |||
|- | |- | ||
|$ | |$D6EE | ||
|$F0: | |$F0:16EE | ||
| | |R | ||
| | |PCBM | ||
| | | colspan="8" |PCB Month (BCD) | ||
|- | |- | ||
|$ | |$D6EF | ||
|$F0: | |$F0:16EF | ||
| | |R | ||
| | |PCBY | ||
| | | colspan="8" |PCB Year (BCD) | ||
|} | |} | ||
===== $D700: VS1053b (F256 Gen 2 only) ===== | |||
Main page: [[Use the VS1053b chip]] | |||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
!R/W | !R/W | ||
!Name | !Name | ||
! | !7 | ||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |- | ||
|$ | |$D700 | ||
|$F0: | |$F0:1700 | ||
| | | | ||
|SCI Control | |||
| colspan="8" |Control the flow of information | |||
|- | |||
|$D701 | |||
|$F0:1701 | |||
| | | | ||
| | |SCI Address | ||
| colspan="8" |Select to which VS1053b address to write to | |||
|- | |- | ||
|$ | |$D702 | ||
|$F0: | |$F0:1702 | ||
| | | | ||
|SCI Data 1 | |||
| colspan="8" |First byte of data | |||
|- | |||
|$D703 | |||
|$F0:1703 | |||
| | | | ||
| | |SCI Data 2 | ||
| colspan="8" |Second byte of data | |||
|- | |- | ||
|$ | |$D704 | ||
|$F0: | |$F0:1704 | ||
| | | | ||
| | |FIFO Count 1 | ||
| | | colspan="8" |First byte of the remaining byte count in the FIFO | ||
|- | |- | ||
|$ | |$D705 | ||
|$F0: | |$F0:1705 | ||
| | | | ||
| | |FIFO Count 2 | ||
| colspan="8" |Second byte of the remaining byte count in the FIFO | |||
|} | |} | ||
== | ===== $D800: Text Mode CLUT ===== | ||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
!R/W | !R/W | ||
!Name | !Name | ||
! | !7 | ||
|- | !6 | ||
|$ | !5 | ||
|$F0: | !4 | ||
| | !3 | ||
!2 | |||
!1 | |||
!0 | |||
|- | |||
|$D800 - $D83F | |||
|$F0:1800 - $F0:183F | |||
|W | |||
| | |||
| colspan="8" |Text foreground colors (16 × [[IO Pages#BGRx|BGRx]]) | |||
|- | |||
|$D840 - $D87F | |||
|$F0:1840 - $F0:187f | |||
|W | |||
| | | | ||
|Text | | colspan="8" |Text background colors (16 × [[IO Pages#BGRx|BGRx]]) | ||
|} | |} | ||
1 byte per character, 40 or 80 characters per row, 25|30|50|60 rows in the matrix. Each character byte refers to an entry in the currently selected font set. | |||
===== $D880: NES/SNES Gamepads ===== | |||
80×60 characters uses 4800 ($12C0) bytes, which is only a bit more than half the 8k allocation. | Main page: [[Use the SNES/NES controllers]] | ||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |||
|$D880 | |||
|$F0:1880 | |||
|R | |||
|NES_CTRL | |||
|NES_TRIG | |||
|DONE | |||
|— | |||
|— | |||
|— | |||
|MODE | |||
|— | |||
|NES_EN | |||
|- | |||
| | |||
| | |||
|W | |||
|NES_CTRL | |||
|NES_TRIG | |||
|— | |||
|— | |||
|— | |||
|— | |||
|MODE | |||
|— | |||
|NES_EN | |||
|- | |||
|$D884 | |||
|$F0:1884 | |||
| | |||
| | |||
| colspan="8" |Pad 0 | |||
|- | |||
|$D886 | |||
|$F0:1886 | |||
| | |||
| | |||
| colspan="8" |Pad 1 | |||
|- | |||
|$D888 | |||
|$F0:1888 | |||
| | |||
| | |||
| colspan="8" |Pad 2 | |||
|- | |||
|$D88A | |||
|$F0:188A | |||
| | |||
| | |||
| colspan="8" |Pad 3 | |||
|- | |||
| | |||
| +0 | |||
| | |||
|Mode=0 | |||
|A | |||
|B | |||
|SELECT | |||
|START | |||
|UP | |||
|DOWN | |||
|LEFT | |||
|RIGHT | |||
|- | |||
| | |||
| +0 | |||
| | |||
|Mode=1 | |||
|B | |||
|Y | |||
|SELECT | |||
|START | |||
|UP | |||
|DOWN | |||
|LEFT | |||
|RIGHT | |||
|- | |||
| | |||
| +1 | |||
| | |||
|Mode=1 | |||
|— | |||
|— | |||
|— | |||
|— | |||
|A | |||
|X | |||
|L | |||
|R | |||
|} | |||
===== $D900: Sprites ===== | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |||
|$D900 - $DAFF | |||
|$F0:1900 - $F0:1AFF | |||
| | |||
| | |||
| colspan="8" |64 × 8-byte Sprite Registers | |||
|- | |||
| | |||
| +0 | |||
|W | |||
| | |||
|— | |||
| colspan="2" |SIZE | |||
| colspan="2" |LAYER | |||
| colspan="2" |LUT | |||
|ENABLE | |||
|- | |||
| | |||
| | |||
| | |||
|SIZE | |||
| colspan="8" |0: 32×32 | |||
1: 24×24 | |||
2: 16×16 | |||
3: 8×8 | |||
|- | |||
| | |||
| +1 | |||
|W | |||
| | |||
| colspan="8" |[[IO Pages#SRAM Address|SRAM Address]] of sprite pixels (24-bit) | |||
|- | |||
| | |||
| +4 | |||
|W | |||
| | |||
| colspan="8" |X position (16-bit) | |||
|- | |||
| | |||
| +6 | |||
|W | |||
| | |||
| colspan="8" |Y position (16-bit) | |||
|} | |||
===== $DB00: Moar system ===== | |||
====== $DB00: VIAs ====== | |||
See: [[Keyboard raw codes]] | |||
<nowiki>*</nowiki> = F256k series only | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |||
|$DB00* | |||
|$F0:1B00* | |||
| | |||
|VIA1 | |||
| colspan="8" |Internal Keyboard VIA* | |||
|- | |||
|$DC00 | |||
|$F0:1C00 | |||
| | |||
|VIA0 | |||
| colspan="8" |Atari joystick VIA | |||
|- | |||
| | |||
| +0 | |||
|RW | |||
|IORB | |||
| colspan="8" |Port B Data | |||
|- | |||
| | |||
| | |||
| | |||
| | |||
| colspan="8" |VIA0: Joystick 0, keyboard column 8* | |||
VIA1: Keyboard columns 0-7* | |||
|- | |||
| | |||
| +1 | |||
|RW | |||
|IORA | |||
| colspan="8" |Port A Data | |||
|- | |||
| | |||
| | |||
| | |||
| | |||
| colspan="8" |VIA0: Joystick 1 | |||
VIA1: Keyboard row* | |||
|- | |||
| | |||
| +2 | |||
|RW | |||
|DDRB | |||
| colspan="8" |Port B Data Direction Register | |||
|- | |||
| | |||
| +3 | |||
|RW | |||
|DDRA | |||
| colspan="8" |Port A Data Direction Register | |||
|- | |||
| | |||
| +4 | |||
|RW | |||
|T1C | |||
| colspan="8" |Timer 1 Counter (16-bit) | |||
|- | |||
| | |||
| +6 | |||
|RW | |||
|T1L | |||
| colspan="8" |Timer 1 Latch (16-bit) | |||
|- | |||
| | |||
| +8 | |||
|RW | |||
|T2C | |||
| colspan="8" |Timer 2 Counter (16-bit) | |||
|- | |||
| | |||
| +A | |||
|RW | |||
|SDR | |||
| colspan="8" |Serial Data Registers | |||
|- | |||
| | |||
| +B | |||
|RW | |||
|ACR | |||
| colspan="2" |T1_CTRL | |||
|T2_CTRL | |||
| colspan="3" |SR_CTRL | |||
|PBL_EN | |||
|PAL_EN | |||
|- | |||
| | |||
| +C | |||
|RW | |||
|PCR | |||
| colspan="3" |CB2_CTRL | |||
|CB1_CTRL | |||
| colspan="3" |CA1_CTRL | |||
|CA1_CTRL | |||
|- | |||
| | |||
| +D | |||
|RW | |||
|IFR | |||
|IRQF | |||
|T1F | |||
|T2F | |||
|CB1F | |||
|CB2F | |||
|SRF | |||
|CA1F | |||
|CA2F | |||
|- | |||
| | |||
| +E | |||
|RW | |||
|IER | |||
|SET | |||
|T1E | |||
|T2E | |||
|CB1E | |||
|CB2E | |||
|SRE | |||
|CA1E | |||
|CA2E | |||
|- | |||
| | |||
| +F | |||
|RW | |||
|IORA2 | |||
| colspan="8" |Port A Data (no handshake) | |||
|} | |||
{| class="wikitable" | |||
|+VIA0 Joystick Bits | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |||
|Keyboard column 8* | |||
|Button 2 | |||
|Button 1 | |||
|Button 0 | |||
|Right | |||
|Left | |||
|Down | |||
|Up | |||
|} | |||
{| class="wikitable" | |||
|+VIA1 Internal Keyboard Matrix* | |||
! | |||
!PB0 | |||
!PB1 | |||
!PB2 | |||
!PB3 | |||
!PB4 | |||
!PB5 | |||
!PB6 | |||
!PB7 | |||
!VIA0 PB7 | |||
|- | |||
|'''PA0''' | |||
|Del | |||
|Return | |||
|Left | |||
|F7 | |||
|F1 | |||
|F3 | |||
|F5 | |||
|Up | |||
|Down | |||
|- | |||
|'''PA1''' | |||
|3 | |||
|W | |||
|A | |||
|4 | |||
|Z | |||
|S | |||
|E | |||
|LShift | |||
| | |||
|- | |||
|'''PA2''' | |||
|5 | |||
|R | |||
|D | |||
|6 | |||
|C | |||
|F | |||
|T | |||
|X | |||
| | |||
|- | |||
|'''PA3''' | |||
|7 | |||
|Y | |||
|G | |||
|8 | |||
|B | |||
|H | |||
|U | |||
|V | |||
| | |||
|- | |||
|'''PA4''' | |||
|9 | |||
|I | |||
|J | |||
|0 | |||
|M | |||
|K | |||
|O | |||
|N | |||
| | |||
|- | |||
|'''PA5''' | |||
| - | |||
|P | |||
|L | |||
|Caps | |||
|. | |||
|; | |||
|[ | |||
|, | |||
| | |||
|- | |||
|'''PA6''' | |||
|= | |||
|] | |||
|' | |||
|Home | |||
|RShift | |||
|Alt | |||
|Tab | |||
|/ | |||
|Right | |||
|- | |||
|'''PA7''' | |||
|1 | |||
|BS | |||
|Ctrl | |||
|2 | |||
|Space | |||
|Foenix | |||
|Q | |||
|Run/Stop | |||
| | |||
|} | |||
====== $DD00: SD Card Controllers ====== | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |||
|$DD00 | |||
|$F0:1D00 | |||
| | |||
| | |||
| colspan="8" |SD Card 0 (external) | |||
|- | |||
|$DD20 | |||
|$F0:1D20 | |||
| | |||
| | |||
| colspan="8" |SD Card 1 (internal) | |||
|- | |||
| | |||
| +0 | |||
|RW | |||
| | |||
|SPI_BUSY | |||
|— | |||
|— | |||
|— | |||
|— | |||
|— | |||
|SPI_CLK | |||
|CS_EN | |||
|- | |||
| | |||
| +1 | |||
|RW | |||
| | |||
| colspan="8" |SPI_DATA | |||
|} | |||
'''SPI_CLK''': 400MHz init clock when set, 12.5MHz standard clock when clear. | |||
====== $DD40: F256K2 Case LCD Screen ====== | |||
Main page: [[Use the K2 LCD]] | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |||
|$DD40 | |||
|$F0:1D40 | |||
| | |||
|LCD_CMD_CMD | |||
| colspan="8" |Command | |||
|- | |||
|$DD41 | |||
|$F0:1D41 | |||
| | |||
|LCD_CMD_DTA | |||
| colspan="8" |Data | |||
|- | |||
|$DD42 | |||
|$F0:1D42 | |||
| | |||
|LCD_PIX_LO | |||
| colspan="3" |Green[2:0] | |||
| colspan="5" |Blue | |||
|- | |||
|$DD43 | |||
|$F0:1D43 | |||
| | |||
|LCD_PIX_HI | |||
| colspan="5" |Red | |||
| colspan="3" |Green[5:3] | |||
|} | |||
===== $DDA0: SAM2695 MIDI (F256 Gen 2 only) ===== | |||
Main page: [[Use the Sam2695 Dream MIDI chip]] | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |||
|$DDA0 | |||
|$F0:1DA0 | |||
|R | |||
|MIDI_STATUS | |||
|TX_EMPTY | |||
|RX_FULL | |||
|— | |||
|— | |||
|— | |||
|— | |||
|— | |||
|— | |||
|- | |||
|$DDA1 | |||
|$F0:1DA1 | |||
|RW | |||
|MIDI_FIFO_DATA_PORT | |||
| colspan="8" |Data | |||
|- | |||
|$DDA2 | |||
|$F0:1DA2 | |||
| | |||
|MIDI_RXD_COUNT | |||
| colspan="8" |Rx FIFO Data count (12-bit) | |||
|- | |||
|$DDA4 | |||
|$F0:1DA4 | |||
| | |||
|MIDI_TXD_COUNT | |||
| colspan="8" |Tx FIFO Data Count (12-bit) | |||
|} | |||
===== $DDC0: Optical Keyboard Controller (F256K2 Only) ===== | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |||
|$DDC0 | |||
|$F0:1DC0 | |||
| | |||
|OPT_KBD_DATA | |||
| colspan="8" |FIFO queue. Each event is two 8-bit reads from here | |||
|- | |||
|$DDC1 | |||
|$F0:1DC1 | |||
|R | |||
|OPT_KBD_STATUS | |||
|MECH | |||
|— | |||
|— | |||
|— | |||
|— | |||
|— | |||
|— | |||
|FIFO_EMPTY | |||
|- | |||
| | |||
| | |||
| | |||
| | |||
| colspan="8" |MECH = No optical keyboard if set | |||
|- | |||
|$DDC2 | |||
|$F0:1DC2 | |||
| | |||
|OPT_KB_COUNT | |||
| colspan="8" |Number of events in optical keyboard queue (12-bit) | |||
|} | |||
===== $DE00: Integer Math Coprocessor ===== | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |||
|$DE00 | |||
|$F0:1E00 | |||
|RW | |||
|MULU_A | |||
| colspan="8" |Multiplication A (Unsigned 16-bit) | |||
|- | |||
|$DE02 | |||
|$F0:1E02 | |||
|RW | |||
|MULU_B | |||
| colspan="8" |Multiplication B (Unsigned 16-bit) | |||
|- | |||
|$DE04 | |||
|$F0:1E04 | |||
|RW | |||
|DIVU_DEN | |||
| colspan="8" |Division Denominator (Unsigned 16-bit) | |||
|- | |||
|$DE06 | |||
|$F0:1E06 | |||
|RW | |||
|DIVU_NUM | |||
| colspan="8" |Division Numerator (Unsigned 16-bit) | |||
|- | |||
|$DE08 | |||
|$F0:1E08 | |||
|RW | |||
|ADD_A | |||
| colspan="8" |Addition A (Unsigned 32-bit) | |||
|- | |||
|$DE0C | |||
|$F0:1E0C | |||
|RW | |||
|ADD_B | |||
| colspan="8" |Addition B (Unsigned 32-bit) | |||
|- | |||
| | |||
| | |||
| | |||
| | |||
| colspan="8" | | |||
|- | |||
|$DE10 | |||
|$F0:1E10 | |||
|RW | |||
|MULU | |||
| colspan="8" |Multiplication A×B Result (Unsigned 32-bit) | |||
|- | |||
|$DE14 | |||
|$F0:1E14 | |||
|RW | |||
|QUOU | |||
| colspan="8" |Quotient of Num/Den (Unsigned 16-bit) | |||
|- | |||
|$DE16 | |||
|$F0:1E16 | |||
|RW | |||
|REMU | |||
| colspan="8" |Remainder of Num/Den (Unsigned 16-bit) | |||
|- | |||
|$DE18 | |||
|$F0:1E18 | |||
|RW | |||
|ADD_R | |||
| colspan="8" |Addition A+B Result (Unsigned 32-bit) | |||
|} | |||
Multiplication, division, and addition operations are completely independent of each other. Results are available immediately. | |||
===== $DF00: DMA Controller ===== | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!7 | |||
!6 | |||
!5 | |||
!4 | |||
!3 | |||
!2 | |||
!1 | |||
!0 | |||
|- | |||
|$DF00 | |||
|$F0:1F00 | |||
|RW | |||
| | |||
|START | |||
|— | |||
|— | |||
|— | |||
|INT_EN | |||
|FILL | |||
|2D | |||
|ENABLE | |||
|- | |||
|$DF01 | |||
|$F0:1F01 | |||
|W | |||
| | |||
| colspan="8" |Fill data byte | |||
|- | |||
|$DF04 | |||
|$F0:1F04 | |||
|RW | |||
| | |||
| colspan="8" |Source [[IO Pages#SRAM Address|SRAM Address]] (24-bit) | |||
|- | |||
|$DF08 | |||
|$F0:1F08 | |||
|RW | |||
| | |||
| colspan="8" |Destination [[IO Pages#SRAM Address|SRAM Address]] (24-bit) | |||
|- | |||
|$DF0C | |||
|$F0:1F0C | |||
|RW | |||
| | |||
| colspan="8" |Count (24-bit, not 2D mode) | |||
|- | |||
| | |||
| | |||
|RW | |||
| | |||
| colspan="8" |Width (16-bit, 2D mode) | |||
|- | |||
|$DF0E | |||
|$F0:1F0E | |||
|RW | |||
| | |||
| colspan="8" |Height (16-bit, 2D mode) | |||
|- | |||
|$DF10 | |||
|$F0:1F10 | |||
|RW | |||
| | |||
| colspan="8" |Source stride (16-bit, 2D mode) | |||
|- | |||
|$DF12 | |||
|$F0:1F12 | |||
|RW | |||
| | |||
| colspan="8" |Destination stride (16-bit, 2D mode) | |||
|} | |||
DMA only runs during VBlank, and halts the CPU to take over the entire bus. This runs at 100MHz, at 8 bits (gen 1) or 16 bits (gen 2) wide. | |||
== IO Page 1 == | |||
====== $C000: Text Mode Font Sets ====== | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!Description | |||
|- | |||
|$C000 - $C7FF | |||
|$F0:2000 - $F0:27FF | |||
|RW | |||
| | |||
|Font set 0 (256 × 8-byte chars) | |||
|- | |||
|$C800 - $CFFF | |||
|$F0:2800 - $F0:2FFF | |||
|RW | |||
| | |||
|Font set 1 (256 × 8-byte chars) | |||
|} | |||
Characters are 8×8 pixels. Each byte is an 8-pixel row of bits, with MSB at the left. 8 rows top to bottom. | |||
====== $D000: Graphics CLUTs ====== | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!Description | |||
|- | |||
|$D000 - $D3FF | |||
|$F0:3000 - $F0:33FF | |||
|RW | |||
| | |||
|Graphics CLUT 0 (256 × [[IO Pages#BGRx|BGRx]]) | |||
|- | |||
|$D400 - $D7FF | |||
|$F0:3400 - $F0:37FF | |||
|RW | |||
| | |||
|Graphics CLUT 1 (256 × [[IO Pages#BGRx|BGRx]]) | |||
|- | |||
|$D800 - $DBFF | |||
|$F0:3800 - $F0:3BFF | |||
|RW | |||
| | |||
|Graphics CLUT 2 (256 × [[IO Pages#BGRx|BGRx]]) | |||
|- | |||
|$DC00 - $DFFF | |||
|$F0:3C00 - $F0:3FFF | |||
|RW | |||
| | |||
|Graphics CLUT 3 (256 × [[IO Pages#BGRx|BGRx]]) | |||
|} | |||
== IO Page 2 == | |||
====== $C000: Text Screen Character Matrix ====== | |||
{| class="wikitable" | |||
!MMU | |||
!Flat | |||
!R/W | |||
!Name | |||
!Description | |||
|- | |||
|$C000 - $DFFF | |||
|$F0:4000 - $F0:5FFF | |||
|RW | |||
| | |||
|Text screen character matrix | |||
|} | |||
1 byte per character, 40 or 80 characters per row, 25|30|50|60 rows in the matrix. Each character byte refers to an entry in the currently selected font set. | |||
80×60 characters uses 4800 ($12C0) bytes, which is only a bit more than half the 8k allocation. | |||
== IO Page 3 == | == IO Page 3 == | ||
====== $C000: Text Screen Color Matrix ====== | |||
{| class="wikitable" | {| class="wikitable" | ||
!MMU | !MMU | ||
!Flat | !Flat | ||
Latest revision as of 18:10, 26 October 2025
More detailed information is found in the Manuals.
Notes
SRAM Address: Raw addresses for the system SRAM chip. The VICKY can only address the system SRAM (for now, DDR3 support coming). The 1st gen hardware has 512kB (19-bit space), while the 2nd gen has 2MB (21-bit space). The 24-bit pointers used are direct addresses into the SRAM chip, regardless of how the 2MB is mapped to the CPU's/MMU's address space. For instance, Core2x has 4 separate 512kB banks at non-consecutive addresses; these 4 banks are all linear+consecutive in the SRAM, and that view must be addressed here instead of its 24-bit CPU-visible addresses.
Model names: Certain features are only available on certain models, and these terms are used exactly. For instance, "F256Jr" means exactly the 1st gen Jr, not the entire Jr line.
BGR: A 3-byte color entry in Blue, Green, Red order.
BGRx: A 4-byte aligned color entry in Blue, Green, Red order, with the 4th byte unused.
IO Page 0
$C000 Gamma Lookup
| MMU | Flat | R/W | Name | Description |
|---|---|---|---|---|
| $C000 - $C0FF | $F0:0000 - $F0:00FF | RW | Blue gamma conversion table | |
| $C400 - $C4FF | $F0:0400 - $F0:04FF | RW | Green gamma conversion table | |
| $C800 - $C8FF | $F0:0800 - $F0:08FF | RW | Red gamma conversion table |
Each area is 256 bytes, mapping an 8-bit value (offset) to an 8-bit value (memory value), mirrored 4 times currently to fill each 1kB address space.
$CC00: Mouse Pointer Bitmap
See: Use the PS/2 Mouse
| MMU | Flat | R/W | Name | Description |
|---|---|---|---|---|
| $CC00 - $CCFF | $F0:0C00 - $F0:0CFF | RW | Mouse pointer bitmap (16×16 greyscale bytes) |
This is currently mirrored 4 times in $CC00 - $CFFF.
$D000: VICKY Config
$D000: Master Control Registers
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D000 | $F0:1000 | RW | MSTR_CTRL_0 | — | GAMMA | SPRITE | TILE | BITMAP | GRAPH | OVRLY | TEXT |
| $D001 | $F0:1001 | RW | MSTR_CTRL_1 | — | — | FON_SET | FON_OVLY | MON_SLP | DBL_Y | DBL_X | CLK_70 |
TEXT: Enable text layer
OVRLY: Overlay text on graphics, by making text background transparent. See FON_OVLY
GRAPH: Enable graphics layers (tile, sprites, bitmaps)
BITMAP: Enable bitmap layers (if GRAPH is also set)
TILE: Enable tile layers (if GRAPH is also set)
SPRITE: Enable sprite layers (if GRAPH is also set)
GAMMA: Enable gamma correction
CLK_70: Enable 400p70, else 480p60
DBL_X, DBL_Y: Double text mode character width & height
MON_SLP: Turn off monitor SYNC, putting it into sleep mode
FON_OVLY: Only BG color 0 is transparent in OVRLY mode. Else, all BG colors are transparent.
FON_SET: Chooses font set 0 or 1
$D002: Layers
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D002 | $F0:1002 | RW | — | Layer 1 | — | Layer 0 | |||||
| $D003 | $F0:1003 | RW | — | — | — | — | — | Layer 2 | |||
| Values | 0-2: Bitmap 0-2
4-6: Tilemap 0-2 | ||||||||||
$D004: Border
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D004 | $F0:1004 | RW | BRDR_CTRL | — | SCROLL_X | — | — | — | ENABLE | ||
| $D005 | $F0:1005 | RW | BRDR_BLUE | Border color Blue component | |||||||
| $D006 | $F0:1006 | RW | BRDR_GREEN | Border color Green component | |||||||
| $D007 | $F0:1007 | RW | BRDR_RED | Border color Red component | |||||||
| $D008 | $F0:1008 | RW | BRDR_WIDTH | — | — | — | SIZE_X | ||||
| $D009 | $F0:1009 | RW | BRDR_HEIGHT | — | — | — | SIZE_Y | ||||
$D00D: Background
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D00D | $F0:100D | RW | BGND_BLUE | Background color Blue component | |||||||
| $D00E | $F0:100E | RW | BGND_GREEN | Background color Green component | |||||||
| $D00F | $F0:100F | RW | BGND_RED | Background color Red component | |||||||
$D010: Text Cursor
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D010 | $F0:1010 | RW | CCR | — | — | — | — | FLASH_DIS | RATE | ENABLE | |
| RATE | 0: 1 second
1: 1/2 second 2: 1/4 second 3: 1/8 second | ||||||||||
| $D012 | $F0:1012 | RW | CCH | Cursor character code | |||||||
| $D014 | $F0:1014 | RW | CURX | Cursor X position (16-bit) | |||||||
| $D016 | $F0:1016 | RW | CURY | Cursor Y position (16-bit) | |||||||
$D018: Raster
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D018 | $F0:1018 | R | RAST_COL | Raster current column (12-bit) | |||||||
| $D01A | $F0:101A | R | RAST_ROW | Raster current row (12-bit) | |||||||
| $D018 | $F0:1018 | W | LINT_CTRL | — | — | — | — | — | — | — | ENABLE |
| $D019 | $F0:1019 | W | LINT_L | Line interrupt line (12-bit) | |||||||
$D100: Bitmaps
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D100 | $F0:1100 | Bitmap 0 | |||||||||
| $D108 | $F0:1108 | Bitmap 1 | |||||||||
| $D110 | $F0:1110 | Bitmap 2 | |||||||||
| +0 | RW | — | — | — | — | — | CLUT | ENABLE | |||
| +1 | RW | SRAM Address of pixels (24-bit) | |||||||||
$D200: Tilemaps
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D200 | $F0:1200 | Tilemap 0 | |||||||||
| $D20C | $F0:120C | Tilemap 1 | |||||||||
| $D218 | $F0:1218 | Tilemap 2 | |||||||||
| +$00 | W | — | — | — | TILE_SIZE_8 | — | — | — | ENABLE | ||
| +$01 | W | SRAM Address of tile map entries (24-bit) | |||||||||
| +$04 | W | MAP_SIZE_X (8-bit) | |||||||||
| +$06 | W | MAP_SIZE_Y (8-bit) | |||||||||
| +$08 | W | X[3:0] | SSX | ||||||||
| +$09 | W | — | — | X[9:4] | |||||||
| +$0A | W | Y[3:0] | SSY | ||||||||
| +$0B | W | — | — | — | — | Y[7:4] | |||||
$D280: Tilesets
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D280 | $F0:1280 | Tileset 0 | |||||||||
| $D284 | $F0:1284 | Tileset 1 | |||||||||
| $D288 | $F0:1288 | Tileset 2 | |||||||||
| $D28C | $F0:128C | Tileset 3 | |||||||||
| $D290 | $F0:1290 | Tileset 4 | |||||||||
| $D294 | $F0:1294 | Tileset 5 | |||||||||
| $D298 | $F0:1298 | Tileset 6 | |||||||||
| $D29C | $F0:129C | Tileset 7 | |||||||||
| +0 | W | SRAM Address of tile pixels (24-bit) | |||||||||
| +3 | W | — | — | — | — | SQUARE | — | — | — | ||
$D400: Sound
$D400: SID chips
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D400 | $F0:1400 | Left SID | |||||||||
| $D500 | $F0:1500 | Right SID | |||||||||
| +$00 | W | Voice 1 | Frequency (16-bit) | ||||||||
| +$02 | W | Pulse width (12-bit) | |||||||||
| +$04 | W | NOISE | PULSE | SAW | TRI | TEST | RING | SYNC | GATE | ||
| +$05 | W | ATTACK | DELAY | ||||||||
| +$06 | W | SUSTAIN | RELEASE | ||||||||
| +$07 | W | Voice 2 | Frequency (16-bit) | ||||||||
| +$09 | W | Pulse width (12-bit) | |||||||||
| +$0B | W | NOISE | PULSE | SAW | TRI | TEST | RING | SYNC | GATE | ||
| +$0C | W | ATTACK | DELAY | ||||||||
| +$0D | W | SUSTAIN | RELEASE | ||||||||
| +$0E | W | Voice 3 | Frequency (16-bit) | ||||||||
| +$10 | W | Pulse width (12-bit) | |||||||||
| +$12 | W | NOISE | PULSE | SAW | TRI | TEST | RING | SYNC | GATE | ||
| +$13 | W | ATTACK | DELAY | ||||||||
| +$14 | W | SUSTAIN | RELEASE | ||||||||
| +$15 | W | Misc | — | — | — | — | — | FC[2:0] | |||
| +$16 | W | FC[10:3] | |||||||||
| +$17 | W | RESONANCE | EXT | FILTV3 | FILTV2 | FILTV1 | |||||
| +$18 | W | MUTEV3 | HIGH | BAND | LOW | VOLUME | |||||
$D580: OPL3 (NOT on F256Jr!)
Main page: Use the OPL3 YMF262
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D580 | $F0:1580 | W | Address registers for ports $000 - $0FF | ||||||||
| $D581 | $F0:1581 | W | Data registers for all ports | ||||||||
| $D582 | $F0:1582 | W | Address register for ports $100 - $1FF | ||||||||
$D600: PSGs
Main page: Use the PSG
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D600 | $F0:1600 | PSG Left | |||||||||
| $D608 | $F0:1608 | PSG Left + Right | |||||||||
| $D610 | $F0:1610 | PSG Right | |||||||||
Stereo separation is enabled with the PSG_ST flag. By default, both PSGs go to both speakers.
$D620: CODEC
Main page: Use the CODEC
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D620 | $F0:1620 | W | DATA[7:0] | ||||||||
| $D621 | $F0:1621 | W | REGISTER | DATA[8] | |||||||
| $D622 | $F0:1622 | R | — | — | — | — | — | — | — | BUSY | |
| W | — | — | — | — | — | — | — | START | |||
$D630: System
$D630: UART
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| DLAB = 0 | |||||||||||
| $D630 | $F0:1630 | R | RXD | RX_DATA | |||||||
| W | TXR | TX_DATA | |||||||||
| $D631 | $F0:1631 | RW | IER | — | — | — | — | STAT | ERR | TXE | RXA |
| DLAB = 1 | |||||||||||
| $D630 | $F0:1630 | RW | DL | DIV (16-bit) | |||||||
| $D632 | $F0:1632 | R | IIR | FIFO | FIFO64 | — | STATE | /PENDING | |||
| W | FCR | RXT | FIFO64 | — | DMA | TXR | RXR | FIFOE | |||
| $D633 | $F0:1633 | RW | LCR | DLAB | — | PARITY | STOP | DATA | |||
$D640: PS/2
See: Use the PS/2 Mouse
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D640 | $F0:1640 | RW | PS2_CTRL | — | — | MCLR | KCLR | M_WR | — | K_WR | — |
| $D641 | $F0:1641 | RW | PS2_OUT | Data to keyboard | |||||||
| $D642 | $F0:1642 | R | KBD_IN | Data in from keyboard FIFO | |||||||
| $D643 | $F0:1643 | R | MS_IN | Data in from mouse FIFO | |||||||
| $D644 | $F0:1644 | R | PS2_STAT | K_AK | K_NK | M_AK | M_NK | — | — | MEMP | KEMP |
$D650: Timers
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D650 | $F0:1650 | W | T0_CTR | — | — | — | — | UP | LD | CLR | EN |
| R | T0_STAT | — | — | — | — | — | — | — | EQ | ||
| $D651 | $F0:1651 | RW | T0_VAL | VAL (24-bit) | |||||||
| $D654 | $F0:1654 | RW | T0_CMP_CTR | — | — | — | — | — | — | RELD | RECLR |
| $D655 | $F0:1655 | RW | T0_CMP | CMP (24-bit) | |||||||
| $D658 | $F0:1658 | W | T1_CTR | — | — | — | — | UP | LD | CLR | EN |
| R | T1_STAT | — | — | — | — | — | — | — | EQ | ||
| $D659 | $F0:1659 | RW | T1_VAL | VAL (24-bit) | |||||||
| $D65C | $F0:165C | RW | T1_CMP_CTR | — | — | — | — | — | — | RELD | RECLR |
| $D65D | $F0:165D | RW | T1_CMP | CMP (24-bit) | |||||||
$D660: Interrupts
Main page: IRQ, IRQ Programming
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D660 | $F0:1660 | INT_PENDING | Per-interrupt flags (24-bit) | ||||||||
| $D664 | $F0:1664 | INT_POLARITY | Per-interrupt flags (24-bit) | ||||||||
| $D668 | $F0:1668 | INT_EDGE | Per-interrupt flags (24-bit) | ||||||||
| $D66C | $F0:166C | INT_MASK | Per-interrupt flags (24-bit) | ||||||||
| +0 & $01 | INT_VKY_SOF | Start of Frame interrupt (beginning of VSYNC) | |||||||||
| +0 & $02 | INT_VKY_SOL | Start of Line interrupt | |||||||||
| +0 & $04 | INT_PS2_KBD | PS/2 keyboard event | |||||||||
| +0 & $08 | INT_PS2_MOUSE | PS/2 mouse event | |||||||||
| +0 & $10 | INT_TIMER_0 | TIMER0 has reached its target value | |||||||||
| +0 & $20 | INT_TIMER_1 | TIMER1 has reached its target value | |||||||||
| +0 & $80 | INT_CARTRIDGE | Interrupt asserted from cartridge port | |||||||||
| +1 & $01 | INT_UART | The UART is ready to receive or send data | |||||||||
| +1 & $10 | INT_RTC | Interrupt from real time clock chip | |||||||||
| +1 & $20 | INT_VIA0 | Event from the joystick VIA chip | |||||||||
| +1 & $40 | INT_VIA1 | Event from the keyboard VIA chip (F256k Series Only!) | |||||||||
| +1 & $80 | INT_SDC_INS | SD Card has been inserted | |||||||||
| +2 & $01 | IEC_DATA_i | IEC data in | |||||||||
| +2 & $02 | IEC_CLK_i | IEC clock in | |||||||||
| +2 & $04 | IEC_ATN_i | IEC attention in | |||||||||
| +2 & $08 | IEC_SREQ_i | IEC service request in | |||||||||
$D670: DIP Switches
Main page: DIP switches
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D670 | $F0:1670 | R | GAMMA | USER2 | USER1 | USER0 | BOOT | ||||
$D680: IEC
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D680 | $F0:1680 | R | IEC_I | SRQ_i | — | — | ATN_i | — | — | CLK_i | DAT_i |
| $D681 | $F0:1681 | RW | IEC_O | SRQ_o | RST_o | NMI_EN | ATN_o | — | — | CLK_o | DAT_o |
$D690: RTC
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D690 | $F0:1690 | RW | Seconds | 0 | 10s digit | 1s digit | |||||
| $D691 | $F0:1691 | RW | Seconds Alarm | 0 | 10s digit | 1s digit | |||||
| $D692 | $F0:1692 | RW | Minutes | 0 | 10s digit | 1s digit | |||||
| $D693 | $F0:1693 | RW | Minutes Alarm | 0 | 10s digit | 1s digit | |||||
| $D694 | $F0:1694 | RW | Hours | AM/PM | 0 | 10s digit | 1s digit | ||||
| $D695 | $F0:1695 | RW | Hours Alarm | AM/PM | 0 | 10s digit | 1s digit | ||||
| $D696 | $F0:1696 | RW | Days | 0 | 0 | 10s digit | 1s digit | ||||
| $D697 | $F0:1697 | RW | Days Alarm | 0 | 0 | 10s digit | 1s digit | ||||
| $D698 | $F0:1698 | RW | Day of Week | 0 | 0 | 0 | 0 | 0 | 1s digit | ||
| $D699 | $F0:1699 | RW | Month | 0 | 0 | 0 | 10s digit | 1s digit | |||
| $D69A | $F0:169A | RW | Year | 10s digit | 1s digit | ||||||
| $D69B | $F0:169B | RW | Rates | 0 | WD | RS | |||||
| $D69C | $F0:169C | RW | Enables | 0 | 0 | 0 | 0 | AIE | PIE | PWRIE | ABE |
| $D69D | $F0:169D | RW | Flags | 0 | 0 | 0 | 0 | AF | PF | PWRF | BVF |
| $D69E | $F0:169E | RW | Control | 0 | 0 | 0 | 0 | UTI | STOP | 12/24 | DSE |
| $D69F | $F0:169F | RW | Century | 10s digit | 1s digit | ||||||
$D6A0: System Control Registers
Main page: Use the LEDs
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D6A0 | $F0:16A0 | W | SYS0 | RESET | — | CAP_EN | BUZZ | L1 | L0 | SD_L | PWR_L |
| R | SYS0 | — | SD_WP | SD_CD | BUZZ | L1 | L0 | SD_L | PWR_L | ||
| $D6A1 | $F0:16A1 | RW | SYS1 | L1_RATE | L0_RATE | SID_ST | PSG_ST | L1_MN | L0_MN | ||
$D6A7: F256k Series LEDs
Main page: Use the LEDs#LED_Color_Registers_on_the_K_and_K2
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D6A7 | $F0:16A7 | W | Power LED color (BGR) | ||||||||
| $D6AA | $F0:16AA | W | Media LED color (BGR) | ||||||||
| $D6AD | $F0:16AD | W | Shift LED color (BGR) | ||||||||
$D6A7: Machine ID and FPGA Core Versions
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D6A7 | $F0:16A7 | R | MID | — | — | — | Machine ID | ||||
| $D6A8 | $F0:16A8 | R | PCBID0 | ASCII character 0: "B" (See also $D6EB) | |||||||
| $D6A9 | $F0:16A9 | R | PCBID1 | ASCII character 1: "0" | |||||||
| $D6AA | $F0:16AA | R | CHSV | VICKY sub-version in BCD (16-bit) | |||||||
| $D6AC | $F0:16AC | R | CHV | VICKY version in BCD (16-bit) | |||||||
| $D6AE | $F0:16AE | R | CHN | VICKY number in BCD (16-bit) | |||||||
$D6E0: Mouse Pointer Control
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D6E0 | $F0:16E0 | W | — | — | — | — | — | — | MODE | EN | |
| $D6E2 | $F0:16E2 | RW | X (16-bit) | ||||||||
| $D6E4 | $F0:16E4 | RW | Y (16-bit) | ||||||||
| $D6E6 | $F0:16E6 | W | PS2_BYTE_0 | ||||||||
| $D6E7 | $F0:16E7 | W | PS2_BYTE_1 | ||||||||
| $D6E8 | $F0:16E8 | W | PS2_BYTE_2 | ||||||||
$D6EB: PCB Information
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D6EB | $F0:16EB | R | PCBMA | PCB Major Rev (ASCII) | |||||||
| $D6EC | $F0:16EC | R | PCBMI | PCB Minor Rev (ASCII) | |||||||
| $D6ED | $F0:16ED | R | PCBD | PCB Day (BCD) | |||||||
| $D6EE | $F0:16EE | R | PCBM | PCB Month (BCD) | |||||||
| $D6EF | $F0:16EF | R | PCBY | PCB Year (BCD) | |||||||
$D700: VS1053b (F256 Gen 2 only)
Main page: Use the VS1053b chip
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D700 | $F0:1700 | SCI Control | Control the flow of information | ||||||||
| $D701 | $F0:1701 | SCI Address | Select to which VS1053b address to write to | ||||||||
| $D702 | $F0:1702 | SCI Data 1 | First byte of data | ||||||||
| $D703 | $F0:1703 | SCI Data 2 | Second byte of data | ||||||||
| $D704 | $F0:1704 | FIFO Count 1 | First byte of the remaining byte count in the FIFO | ||||||||
| $D705 | $F0:1705 | FIFO Count 2 | Second byte of the remaining byte count in the FIFO | ||||||||
$D800: Text Mode CLUT
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D800 - $D83F | $F0:1800 - $F0:183F | W | Text foreground colors (16 × BGRx) | ||||||||
| $D840 - $D87F | $F0:1840 - $F0:187f | W | Text background colors (16 × BGRx) | ||||||||
$D880: NES/SNES Gamepads
Main page: Use the SNES/NES controllers
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D880 | $F0:1880 | R | NES_CTRL | NES_TRIG | DONE | — | — | — | MODE | — | NES_EN |
| W | NES_CTRL | NES_TRIG | — | — | — | — | MODE | — | NES_EN | ||
| $D884 | $F0:1884 | Pad 0 | |||||||||
| $D886 | $F0:1886 | Pad 1 | |||||||||
| $D888 | $F0:1888 | Pad 2 | |||||||||
| $D88A | $F0:188A | Pad 3 | |||||||||
| +0 | Mode=0 | A | B | SELECT | START | UP | DOWN | LEFT | RIGHT | ||
| +0 | Mode=1 | B | Y | SELECT | START | UP | DOWN | LEFT | RIGHT | ||
| +1 | Mode=1 | — | — | — | — | A | X | L | R | ||
$D900: Sprites
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $D900 - $DAFF | $F0:1900 - $F0:1AFF | 64 × 8-byte Sprite Registers | |||||||||
| +0 | W | — | SIZE | LAYER | LUT | ENABLE | |||||
| SIZE | 0: 32×32
1: 24×24 2: 16×16 3: 8×8 | ||||||||||
| +1 | W | SRAM Address of sprite pixels (24-bit) | |||||||||
| +4 | W | X position (16-bit) | |||||||||
| +6 | W | Y position (16-bit) | |||||||||
$DB00: Moar system
$DB00: VIAs
See: Keyboard raw codes
* = F256k series only
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $DB00* | $F0:1B00* | VIA1 | Internal Keyboard VIA* | ||||||||
| $DC00 | $F0:1C00 | VIA0 | Atari joystick VIA | ||||||||
| +0 | RW | IORB | Port B Data | ||||||||
| VIA0: Joystick 0, keyboard column 8*
VIA1: Keyboard columns 0-7* | |||||||||||
| +1 | RW | IORA | Port A Data | ||||||||
| VIA0: Joystick 1
VIA1: Keyboard row* | |||||||||||
| +2 | RW | DDRB | Port B Data Direction Register | ||||||||
| +3 | RW | DDRA | Port A Data Direction Register | ||||||||
| +4 | RW | T1C | Timer 1 Counter (16-bit) | ||||||||
| +6 | RW | T1L | Timer 1 Latch (16-bit) | ||||||||
| +8 | RW | T2C | Timer 2 Counter (16-bit) | ||||||||
| +A | RW | SDR | Serial Data Registers | ||||||||
| +B | RW | ACR | T1_CTRL | T2_CTRL | SR_CTRL | PBL_EN | PAL_EN | ||||
| +C | RW | PCR | CB2_CTRL | CB1_CTRL | CA1_CTRL | CA1_CTRL | |||||
| +D | RW | IFR | IRQF | T1F | T2F | CB1F | CB2F | SRF | CA1F | CA2F | |
| +E | RW | IER | SET | T1E | T2E | CB1E | CB2E | SRE | CA1E | CA2E | |
| +F | RW | IORA2 | Port A Data (no handshake) | ||||||||
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|
| Keyboard column 8* | Button 2 | Button 1 | Button 0 | Right | Left | Down | Up |
| PB0 | PB1 | PB2 | PB3 | PB4 | PB5 | PB6 | PB7 | VIA0 PB7 | |
|---|---|---|---|---|---|---|---|---|---|
| PA0 | Del | Return | Left | F7 | F1 | F3 | F5 | Up | Down |
| PA1 | 3 | W | A | 4 | Z | S | E | LShift | |
| PA2 | 5 | R | D | 6 | C | F | T | X | |
| PA3 | 7 | Y | G | 8 | B | H | U | V | |
| PA4 | 9 | I | J | 0 | M | K | O | N | |
| PA5 | - | P | L | Caps | . | ; | [ | , | |
| PA6 | = | ] | ' | Home | RShift | Alt | Tab | / | Right |
| PA7 | 1 | BS | Ctrl | 2 | Space | Foenix | Q | Run/Stop |
$DD00: SD Card Controllers
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $DD00 | $F0:1D00 | SD Card 0 (external) | |||||||||
| $DD20 | $F0:1D20 | SD Card 1 (internal) | |||||||||
| +0 | RW | SPI_BUSY | — | — | — | — | — | SPI_CLK | CS_EN | ||
| +1 | RW | SPI_DATA | |||||||||
SPI_CLK: 400MHz init clock when set, 12.5MHz standard clock when clear.
$DD40: F256K2 Case LCD Screen
Main page: Use the K2 LCD
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $DD40 | $F0:1D40 | LCD_CMD_CMD | Command | ||||||||
| $DD41 | $F0:1D41 | LCD_CMD_DTA | Data | ||||||||
| $DD42 | $F0:1D42 | LCD_PIX_LO | Green[2:0] | Blue | |||||||
| $DD43 | $F0:1D43 | LCD_PIX_HI | Red | Green[5:3] | |||||||
$DDA0: SAM2695 MIDI (F256 Gen 2 only)
Main page: Use the Sam2695 Dream MIDI chip
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $DDA0 | $F0:1DA0 | R | MIDI_STATUS | TX_EMPTY | RX_FULL | — | — | — | — | — | — |
| $DDA1 | $F0:1DA1 | RW | MIDI_FIFO_DATA_PORT | Data | |||||||
| $DDA2 | $F0:1DA2 | MIDI_RXD_COUNT | Rx FIFO Data count (12-bit) | ||||||||
| $DDA4 | $F0:1DA4 | MIDI_TXD_COUNT | Tx FIFO Data Count (12-bit) | ||||||||
$DDC0: Optical Keyboard Controller (F256K2 Only)
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $DDC0 | $F0:1DC0 | OPT_KBD_DATA | FIFO queue. Each event is two 8-bit reads from here | ||||||||
| $DDC1 | $F0:1DC1 | R | OPT_KBD_STATUS | MECH | — | — | — | — | — | — | FIFO_EMPTY |
| MECH = No optical keyboard if set | |||||||||||
| $DDC2 | $F0:1DC2 | OPT_KB_COUNT | Number of events in optical keyboard queue (12-bit) | ||||||||
$DE00: Integer Math Coprocessor
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $DE00 | $F0:1E00 | RW | MULU_A | Multiplication A (Unsigned 16-bit) | |||||||
| $DE02 | $F0:1E02 | RW | MULU_B | Multiplication B (Unsigned 16-bit) | |||||||
| $DE04 | $F0:1E04 | RW | DIVU_DEN | Division Denominator (Unsigned 16-bit) | |||||||
| $DE06 | $F0:1E06 | RW | DIVU_NUM | Division Numerator (Unsigned 16-bit) | |||||||
| $DE08 | $F0:1E08 | RW | ADD_A | Addition A (Unsigned 32-bit) | |||||||
| $DE0C | $F0:1E0C | RW | ADD_B | Addition B (Unsigned 32-bit) | |||||||
| $DE10 | $F0:1E10 | RW | MULU | Multiplication A×B Result (Unsigned 32-bit) | |||||||
| $DE14 | $F0:1E14 | RW | QUOU | Quotient of Num/Den (Unsigned 16-bit) | |||||||
| $DE16 | $F0:1E16 | RW | REMU | Remainder of Num/Den (Unsigned 16-bit) | |||||||
| $DE18 | $F0:1E18 | RW | ADD_R | Addition A+B Result (Unsigned 32-bit) | |||||||
Multiplication, division, and addition operations are completely independent of each other. Results are available immediately.
$DF00: DMA Controller
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $DF00 | $F0:1F00 | RW | START | — | — | — | INT_EN | FILL | 2D | ENABLE | |
| $DF01 | $F0:1F01 | W | Fill data byte | ||||||||
| $DF04 | $F0:1F04 | RW | Source SRAM Address (24-bit) | ||||||||
| $DF08 | $F0:1F08 | RW | Destination SRAM Address (24-bit) | ||||||||
| $DF0C | $F0:1F0C | RW | Count (24-bit, not 2D mode) | ||||||||
| RW | Width (16-bit, 2D mode) | ||||||||||
| $DF0E | $F0:1F0E | RW | Height (16-bit, 2D mode) | ||||||||
| $DF10 | $F0:1F10 | RW | Source stride (16-bit, 2D mode) | ||||||||
| $DF12 | $F0:1F12 | RW | Destination stride (16-bit, 2D mode) | ||||||||
DMA only runs during VBlank, and halts the CPU to take over the entire bus. This runs at 100MHz, at 8 bits (gen 1) or 16 bits (gen 2) wide.
IO Page 1
$C000: Text Mode Font Sets
| MMU | Flat | R/W | Name | Description |
|---|---|---|---|---|
| $C000 - $C7FF | $F0:2000 - $F0:27FF | RW | Font set 0 (256 × 8-byte chars) | |
| $C800 - $CFFF | $F0:2800 - $F0:2FFF | RW | Font set 1 (256 × 8-byte chars) |
Characters are 8×8 pixels. Each byte is an 8-pixel row of bits, with MSB at the left. 8 rows top to bottom.
$D000: Graphics CLUTs
| MMU | Flat | R/W | Name | Description |
|---|---|---|---|---|
| $D000 - $D3FF | $F0:3000 - $F0:33FF | RW | Graphics CLUT 0 (256 × BGRx) | |
| $D400 - $D7FF | $F0:3400 - $F0:37FF | RW | Graphics CLUT 1 (256 × BGRx) | |
| $D800 - $DBFF | $F0:3800 - $F0:3BFF | RW | Graphics CLUT 2 (256 × BGRx) | |
| $DC00 - $DFFF | $F0:3C00 - $F0:3FFF | RW | Graphics CLUT 3 (256 × BGRx) |
IO Page 2
$C000: Text Screen Character Matrix
| MMU | Flat | R/W | Name | Description |
|---|---|---|---|---|
| $C000 - $DFFF | $F0:4000 - $F0:5FFF | RW | Text screen character matrix |
1 byte per character, 40 or 80 characters per row, 25|30|50|60 rows in the matrix. Each character byte refers to an entry in the currently selected font set.
80×60 characters uses 4800 ($12C0) bytes, which is only a bit more than half the 8k allocation.
IO Page 3
$C000: Text Screen Color Matrix
| MMU | Flat | R/W | Name | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| $C000 - $DFFF | $F0:6000 - $F0:7FFF | RW | Text screen color matrix | ||||||||
| FG color (0-15) | BG color (0-15) | ||||||||||
Exact same layout as the character matrix. One color matrix byte associates to one character matrix byte at the same offset.