Difference between revisions of "V9990"

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search
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 index 0 has a mask of &9F (bits for r,g,b and color key), other indices have a mask of 0x01f for just r,g,b.
+
 
 +
* 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 10: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