V9990: Difference between revisions
Appearance
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
* Reading from the Kanji ROM ports without a Kanji ROM returns databus values | * Reading from the Kanji ROM ports without a Kanji ROM returns databus values | ||
* Palette | |||
* Palette red data has a mask of &9F (bits red and color key bit), blue and green have a mask of 0x01f. | |||
e.g. | |||
LD BC,&FF64 | |||
LD A,14 | |||
OUT (C),C | |||
LD BC,&FF63 | |||
LD A,0 | |||
OUT (C),A | |||
LD BC,&FF61 | |||
LD A,&FF ;; <- reading this component back returns &9F | |||
OUT (C),A | |||
LD A,&FF ;; <- reading this component back returns &1F | |||
OUT (C),A | |||
LD A,&FF ;; <- reading this component back returns &1F | |||
OUT (C),A | |||
* Bits 1,0 of R14 define a ternary counter. If you set this to 3 then reads and writes are ignored. | |||
e.g. | |||
e.g. | |||
LD BC,&FF64 | |||
LD A,14 | |||
OUT (C),C | |||
LD BC,&FF63 | |||
LD A,3 | |||
OUT (C),A | |||
LD BC,&FF61 | |||
LD A,&FF | |||
OUT (C),A ;; write is not done. | |||
LD BC,&FF64 | |||
LD A,14 | |||
OUT (C),C | |||
LD BC,&FF63 | |||
LD A,3 | |||
OUT (C),A | |||
LD BC,&FF61 | |||
IN A,(C) ;; read returns last value written to port | |||
When the ternary counter is 2, and auto-increment is enabled, the ternary counter will wrap to 0 and the palette index will increment. | |||
e.g. | |||
LD BC,&FF64 | |||
LD A,14 | |||
OUT (C),C | |||
LD BC,&FF63 | |||
LD A,2 | |||
OUT (C),A | |||
LD BC,&FF61 | |||
LD A,&FF | |||
OUT (C),A | |||
;; palette index will be 1, and ternary counter is 0. | |||
* If a command transfers data, and it requests data to be written to the command data port, then you can't use a read of this port to clear the data request. It must be a write. Similarly, if a command requests data to be read then you can use a write to clear the data request. | * If a command transfers data, and it requests data to be written to the command data port, then you can't use a read of this port to clear the data request. It must be a write. Similarly, if a command requests data to be read then you can use a write to clear the data request. | ||
* If you read from a write-only register you will see data-bus value because the V9990 doesn't assert data on the bus. | * If you read from a write-only register you will see data-bus value because the V9990 doesn't assert data on the bus. | ||
Revision as of 14:44, 6 October 2018
- Reading from the Kanji ROM ports without a Kanji ROM returns databus values
- Palette red data has a mask of &9F (bits red and color key bit), blue and green have a mask of 0x01f.
e.g.
LD BC,&FF64 LD A,14 OUT (C),C LD BC,&FF63 LD A,0 OUT (C),A LD BC,&FF61 LD A,&FF ;; <- reading this component back returns &9F OUT (C),A LD A,&FF ;; <- reading this component back returns &1F OUT (C),A LD A,&FF ;; <- reading this component back returns &1F OUT (C),A
- Bits 1,0 of R14 define a ternary counter. If you set this to 3 then reads and writes are ignored.
e.g.
e.g.
LD BC,&FF64 LD A,14 OUT (C),C LD BC,&FF63 LD A,3 OUT (C),A LD BC,&FF61 LD A,&FF OUT (C),A ;; write is not done.
LD BC,&FF64 LD A,14 OUT (C),C LD BC,&FF63 LD A,3 OUT (C),A LD BC,&FF61 IN A,(C) ;; read returns last value written to port
When the ternary counter is 2, and auto-increment is enabled, the ternary counter will wrap to 0 and the palette index will increment.
e.g.
LD BC,&FF64 LD A,14 OUT (C),C LD BC,&FF63 LD A,2 OUT (C),A LD BC,&FF61 LD A,&FF OUT (C),A
- palette index will be 1, and ternary counter is 0.
- If a command transfers data, and it requests data to be written to the command data port, then you can't use a read of this port to clear the data request. It must be a write. Similarly, if a command requests data to be read then you can use a write to clear the data request.
- If you read from a write-only register you will see data-bus value because the V9990 doesn't assert data on the bus.
- Some registers have additional bits which are not documented. The mask describes which bits are read/write and which are unchanged.
Where the mask has a '1' bit, this bit is read/write. Where the mask has a '0' bit this bit remains at 0 and can't be changed.
- Register 7 (SCREEN MODE): Mask is &FF. - Register 9 (INTERRUPT READ/WRITE): Mask is &87 - Register 15 (BACK DROP COLOR): Mask is &FF - Register 22 (SCROLL CONTROL): Mask is &C1 - Register 25 (SPRITE PATTERN GENERATOR TABLE BASE ADDRESS): Mask is &CF - Register 26 (LCD CONTROL): Mask is &FF - Register 27 (PRIORITY CONTROL): Mask is &FF