GraphicsV --------- R4 = reason code .. Bits 31..24 = display number, default 0 VSync interrupt occured (Driver -> Kernel) R4 = 1 out: R0-R3 corrupt Set mode R4 = 2 R0 -> VIDC list type 3 Set interlace R4 = 3 R0 = 0 or 1 (off or on) Set blank R4 = 4 R0 = 0 or 1 (unblank or blank) R1 = DPMS state (0 -3) Update pointer R4 = 5 R0 = flags (bit 0 => enable, bit 1 => shape changed) R1 = x pos R2 = y pos R3 -> shape descriptor R3 points to shape_t descriptor block: typedef struct shape_t { uint8 width; /* unpadded width in bytes (see notes) */ uint8 height; /* in pixels */ uint8 padding[2]; /* 2 bytes of padding for field alignment */ void *buffLA; /* logical address of buffer holding pixel data */ void *buffPA; /* corresponding physical address of buffer */ } Notes: 1) if flags bit 0 is 0 (pointer off), x, y, shape are undefined 2) the shape data from RISC OS is always padded with transparent pixels on the rhs, to a width of 32 pixels (8 bytes) 3) pointer clipping is the responsibility of the HAL (eg. may be able to allow display of pointer in border region on some h/w) 4) buffer for pixel data is aligned to a multiple of 256 bytes or better This call is made by the OS at a time to allow smoothly displayed changes (on a VSync) Set DAG R4 = 6 R0 = DAG (0 = display init, 1 = base, 2 = limit, 3 = vdu init) R1 = physical address Vet mode (reserved) R4 = 7 R0 = VIDC list R1 = workspace ? out: R0 = 0 if OK Features R4 = 8 out: R0 = flags word (bit 0 => hardware scroll) (bit 1 => hardware pointer) (bit 2 => interlace with progressive framestore) (bit 3 => separate framestore) (bit 4 => no VSyncs generated) R1 = pixel formats (bits 0-5 => 2^n bpp supported) R2 = buffer alignment requirement in bytes (power of 2) Framestore information R4 = 9 out: R0 = framestore physical base address R1 = framestore size R4 = 0 if external framestore used, preserved if not Write palette entry R4 = 10 R0 = type (0 = normal entry, 1 = border, 2 = pointer) R1 = palette entry (&BBGGRRSS) R2 = palette index Write palette entries R4 = 11 R0 = type (0 = normal entry, 1 = border, 2 = pointer) R1 -> palette entry table R2 = first palette index R3 = number of entries Read palette entry R4 = 12 R0 = type (0 = normal entry, 1 = border, 2 = pointer) R1 = palette entry (&BBGGRRSS) R2 = palette index Out: R1 = palette updated Render R4 = 13 R0 = flags bit 0 = synchronise bit 1 = synchronise if unclaimed R1 = operation R2 -> parameter block IIC_Op R4 = 14 R0 = card<<28 + channel<<24 + I2Ccmnd << 16 + address I2Ccmnd = 1 for read, 0 write R1 ->dma address R2 = byte count Out: R0 = 0 or error block R1 updated R2 updated SelectHead R4 = 15 R0 = head to select (0,1, etc) Out: R0 = 0 or error block Render calls: R1 = 0 NOP no parameters (R2 undefined) - NOP R1 = 1 Copy rectangle R2+0 = source left R2+4 = source bottom R2+8 = dest left R2+12 = dest bottom R2+16 = width-1 R2+20 = height-1 R1 = 2 Fill rectangle R2+0 = left R2+4 = top R2+8 = right R2+12 = bottom R2+16 -> OraEor block (on a 64-byte boundary)