Jump to content
Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

BIOS Screen Functions

From CPCWiki - THE Amstrad CPC encyclopedia!
Revision as of 22:00, 24 January 2010 by Nocash (talk | contribs) (Created page with '== Screen Init == BBFF SCR_INITIALIZE BC02 SCR_RESET == Screen Resolution == BC0E SCR_SET_MODE ;in: A=mode (0=160x200x16, 1=320x200x4, 2=640x200x2) BC11 SCR_GET_MOD…')
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Screen Init

 BBFF SCR_INITIALIZE
 BC02 SCR_RESET

Screen Resolution

 BC0E SCR_SET_MODE      ;in: A=mode (0=160x200x16, 1=320x200x4, 2=640x200x2)
 BC11 SCR_GET_MODE      ;out: A=mode (cy=mode0, z=mode1, ie. cmp mode,1)

Screen Palette

 BC32 SCR_SET_INK       ;in: A=index, B=color1, C=color2
 BC35 SCR_GET_INK       ;in: A=index, out: B=color1, C=color2
 BC38 SCR_SET_BORDER    ;in: B=color1, C=color2
 BC3B SCR_GET_BORDER    ;out: B=color1, C=color2
 BC3E SCR_SET_FLASHING  ;in: H=count1, L=count2
 BC41 SCR_GET_FLASHING  ;out: H=count1, L=count2

VRAM Address Translation

 BC1A SCR_CHAR_POSITION ;in: H=x, L=y, out: HL=vram addr, B=bytes/char
 BC1D SCR_DOT_POSITION  ;in: DE=x, HL=y, out: HL=vram addr, C=mask, DE, B
 BC20 SCR_NEXT_BYTE     ;out: HL=HL+1 (wrapped within 800h-byte block)
 BC23 SCR_PREV_BYTE     ;out: HL=HL-1 (wrapped within 800h-byte block)
 BC26 SCR_NEXT_LINE     ;out: HL=HL+800h, or HL=HL+50h-3800h (or so)
 BC29 SCR_PREV_LINE     ;out: HL=HL-800h, or HL=HL-50h+3800h (or so)
 BC2C SCR_INK_ENCODE    ;in: A=color, out: A=color_mask
 BC2F SCR_INK_DECODE    ;in: A=color_mask, out: A=color
 BC17 SCR_CHAR_LIMITS   ;out: B=max_x(19,39,79), C=max_y(24)

Fill VRAM

 BC14 SCR_MODE_CLEAR    ;clear vram, set offset=0000h, update inks
 BC44 SCR_FILL_BOX      ;in: A=fillbyte, H=x1, L=y1, D=x2, E=y2
 BC47 SCR_FLOOD_BOX     ;in: A=fillbyte, HL=vram addr, D=xsiz, E=ysiz
 BC5F SCR_HORIZONTAL    ;in: A=pen, DE=x1, BC=x2, HL=y
 BC62 SCR_VERTICAL      ;in: A=pen, HL=y1, BC=y2, DE=x

Further Stuff

 BC4A SCR_CHAR_INVERT   ;in: H=x, L=y, B=paper, C=pen
 BC4D SCR_HARDWARE_ROLL ;in: A=paper, B=dir(0=down, FFh=up)
 BC50 SCR_SOFTWARE_ROLL ;in: A=paper, B=dir(""), H=x1, L=y1, D=x2, E=y2
 BC53 SCR_UNPACK        ;in: HL=src, DE=dest (mono 8x8 char to colored 8x8)
 BC56 SCR_REPACK        ;in: H=x, L=y, A=pen, DE=dest (colored 8x8 to mono)
 BC59 SCR_ACCESS        ;in: A=drawmode (0=Normal, 1=XOR, 2=AND, 3=OR)
 BC5C SCR_PIXELS        ;in: HL=vram addr, C=xmask, B=color
 BDE5 HOOK_SCR_READ          ;in: HL=vram addr, C=xmask, out: A=color
 BDE8 HOOK_SCR_WRITE         ;in: HL=vram addr, C=xmask, B=color
 BDEB HOOK_SCR_MODE_CLEAR    ;clear vram, etc. (same as BC14)
 BC05 SCR_SET_OFFSET    ;in: HL.bit10..0 = vram offset 0..7FFh
 BC08 SCR_SET_BASE      ;in: A.bit7-6 = vram block 0..3
 BC0B SCR_GET_LOCATION  ;out: A.bit7-6=block, HL.bit10..0=offset
 BD55 SCR_SET_POSITION_664  ;in: A=BASE,HL=OFFSET, out: A AND C0h, HL AND 7FEh

Machine Pack (Screen)

 BD19 MC_WAIT_FLYBACK    ;wait until/unless PIO.Port B bit0=1 (vsync)
 BD1C MC_SET_MODE        ;in: A=video mode (0..2) (for C' and gate array)
 BD1F MC_SCREEN_OFFSET   ;in: A=base, HL=offset   (for CRTC)
 BD22 MC_CLEAR_INKS      ;in: DE=ptr to border and 1 ink (2 bytes)
 BD25 MC_SET_INKS        ;in: DE=ptr to border and 16 inks (17 bytes)

These functions are directly accessing I/O ports. WAIT_FLYBACK is eventually useful. The MODE/OFFSET apply the new setting to the hardware (but the BIOS functions like TXT_WR_CHAR aren't aware of it; so they do still draw pixels at the old offset and old color depth). The INK functions expect hardware color codes (eg. 14h or 54h for black), and, the infamous blink-feature will overwrite the new colors after soon.