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 Function Summary

From CPCWiki - THE Amstrad CPC encyclopedia!

Kernel RST Vectors

 0000 RESET (RST0/RESET)
 0008 KL_LO_JUMP (RST1)
 000B KL_LO_CALL_HL
 000E KL_JP_BC                 ;in: BC=addr
 0010 KL_SIDE_CALL_SP (RST2)
 0013 KL_SIDE_CALL_HL
 0016 KL_JP_DE                 ;in: DE=addr
 0018 KL_FAR_CALL_SP (RST3)
 001B KL_FAR_CALL_C_HL
 001E KL_JP_HL                 ;in: HL=addr
 0020 KL_RAM_LD_A_HL (RST4)    ;in: HL=src, out: A=[HL]
 0023 KL_FAR_CALL_HL
 0028 KL_FIRM_JUMP (RST5)
 002B DATA (OLD C' WHEN RST 30h OCCURRED WITH LO_ROM ENABLED)
 0030 FREE_FOR_USER (RST6)
 0038 INTERRUPT (RST7/IRQ)
 003B EXT_INTERRUPT_VECTOR
 0066 GARBAGE (THERE'S NO NMI HANDLER IN ROM)

Kernel RAM Functions

 B900 KL_U_ROM_ENABLE    ;out: A=old C'
 B903 KL_U_ROM_DISABLE   ;out: A=old C'
 B906 KL_L_ROM_ENABLE    ;out: A=old C'
 B909 KL_L_ROM_DISABLE   ;out: A=old C'
 B90C KL_ROM_RESTORE     ;in: A=new C' (Bit2,3)
 B90F KL_ROM_SELECT      ;in: C=upper ROM bank (select, and enable that bank)
 B912 KL_CURR_SELECTION  ;out: A=upper ROM bank
 B915 KL_PROBE_ROM       ;in: C=upper ROM bank, out: A=[C000h], HL=[C001h]
 B918 KL_ROM_DESELECT    ;in: B=new C', C=upper ROM bank, out: B=A, C=old bank
 B91B KL_RAM_LDIR        ;in: HL=src, DE=dest, BC=len
 B91E KL_RAM_LDDR        ;in: HL=src_end, DE=dest_end, BC=len
 B921 KL_POLL_SYNCHRONOUS

664 and up only

 B92A KL_SCAN_NEEDED_664

Keyboard Manager

 BB00 KM_INITIALIZE
 BB03 KM_RESET
 BB06 KM_WAIT_CHAR     out: A=char (waits until valid char)
 BB09 KM_READ_CHAR     out: A=char, cy=1=valid char
 BB0C KM_CHAR_RETURN   in: A=char (writeback max one char to keybuf)
 BB0F KM_SET_EXPAND    in: B=code, HL=ptr to new string, C=length
 BB12 KM_GET_EXPAND    in: A=code (0-1F,80-9F), L=index, out:A=char, cy,zf
 BB15 KM_EXP_BUF_RESET in: de=begin, hl=length of buffer, out: cy: 1=okay
 BB18 KM_WAIT_KEY      out: A=char (waits until key pressed)
 BB1B KM_READ_KEY      out: cy:0=none, cy:1=key pressed, A=char
 BB1E KM_TEST_KEY      in: A=keyno, out: nz=pressed, C=ctrl/shift flags
 BB21 KM_GET_LOCKS     out: H=caps lock (caps), L=shift lock (ctrl+caps)
 BB24 KM_GET_JOYSTICK  out: H=joystick 0, L=joystick 1
 BB27 KM_SET_TRANSLATE in: A=keyno, B=char (normal)
 BB2A KM_GET_TRANSLATE in: A=keyno, out: A=char (normal)
 BB2D KM_SET_SHIFT     in: A=keyno, B=char (with shift)
 BB30 KM_GET_SHIFT     in: A=keyno, out: A=char (with shift)
 BB33 KM_SET_CTRL      in: A=keyno, B=char (with control)
 BB36 KM_GET_CTRL      in: A=keyno, out: A=char (with control)
 BB39 KM_SET_REPEAT    in: A=keyno, B=repeat flag (FFh=on)
 BB3C KM_GET_REPEAT    in: A=keyno, out: nz=repeat
 BB3F KM_SET_DELAY     in: H=1st delay, L=repeat delay
 BB42 KM_GET_DELAY     out: H=1st delay, L=repeat delay
 BB45 KM_ARM_BREAK     in: de=procedure, c=ROM config
 BB48 KM_DISARM_BREAK  in: none
 BB4B KM_BREAK_EVENT

Text Output Functions

 BB4E TXT_INITIALIZE
 BB51 TXT_RESET
 BB54 TXT_VDU_DISABLE
 BB57 TXT_VDU_ENABLE
 BB5A TXT_OUTPUT        in: A=char ;display 20h..FFh, or handle 00h..1Fh
 BB5D TXT_WR_CHAR       in: A=char ;display 00h..FFh
 BB60 TXT_RD_CHAR       out: A=char, Z=space, cy=1=okay
 BB63 TXT_SET_GRAPHIC   in: A=0=normal text position, A>0=graphics position
 BB66 TXT_SET_WINDOW    in: H=x1, L=y1, D=x2, E=y2 (x=0..79, y=0..24)
 BB69 TXT_GET_WINDOW    out: H=x1, L=y1, D=x2, E=y2, cy=0=hardware scrolling
 BB6C TXT_CLEAR_WINDOW  fill window by PAPER color
 BB6F TXT_SET_COLUMN    in: A=x
 BB72 TXT_SET_ROW       in: A=y
 BB75 TXT_SET_CURSOR    in: H=x, L=y
 BB78 TXT_GET_CURSOR    out: H=x, L=y
 BB7B TXT_CUR_ENABLE
 BB7E TXT_CUR_DISABLE
 BB81 TXT_CUR_ON
 BB84 TXT_CUR_OFF
 BB87 TXT_VALIDATE      io: H=x, L=y, out: cy: 1=position ok, 0=scroll
 BB8A TXT_PLACE_CURSOR
 BB8D TXT_REMOVE_CURSOR
 BB90 TXT_SET_PEN       in: A=foreground color 0..15
 BB93 TXT_GET_PEN       out: A=foreground color 0..15
 BB96 TXT_SET_PAPER     in: A=background color 0..15
 BB99 TXT_GET_PAPER     out: A=background color 0..15
 BB9C TXT_INVERSE       exchange foreground and background colors
 BB9F TXT_SET_BACK      in: A=0=normal, A=1=transparent/OR
 BBA2 TXT_GET_BACK      out: Z=normal, NZ=transparent/OR
 BBA5 TXT_GET_MATRIX    in: A=char, out: HL=char bitmap ptr, cy:0=ROM,1=RAM
 BBA8 TXT_SET_MATRIX    in: A=char, HL=ptr to 8x8 char bitmap
 BBAB TXT_SET_M_TABLE   in: D=00h=RAM, E=1st char, HL=RAM chars, out: cy,A,HL
 BBAE TXT_GET_M_TABLE   out: cy=1=RAM, A=1st char, HL=RAM chars
 BBB1 TXT_GET_CONTROLS  out: HL=ptr to table of control characters
 BBB4 TXT_STR_SELECT    in: A=new window number, out: A=old (# 0..7)
 BBB7 TXT_SWAP_STREAMS  in: B,C=window numbers to be exchanged

Graphics Functions

 BBBA GRA_INITIALIZE
 BBBD GRA_RESET_HOOKS   ;out: [BDDC+00h..0Ah]=Default jump opcodes/addresses
 BBC0 GRA_MOVE_ABSOLUTE ;in: de=x, hl=y  ;\set current coordinate
 BBC3 GRA_MOVE_RELATIVE ;in: de=x, hl=y  ;/
 BBC6 GRA_ASK_CURSOR    ;out: de=x, hl=y ;-get current coordinate
 BBC9 GRA_SET_ORIGIN    ;in: de=x, hl=y (also does MOVE 0,0)
 BBCC GRA_GET_ORIGIN    ;out: de=x, hl=y
 BBCF GRA_SET_WIN_WIDTH ;in: de=x1/left, hl=x2/right
 BBD2 GRA_SET_WIN_HEIGHT;in: de=y1/top, hl=y2/bottom
 BBD5 GRA_GET_WIN_WIDTH ;out: de=x1/left, hl=x2/right
 BBD8 GRA_GET_WIN_HEIGHT;out: de=y1/top, hl=y2/bottom
 BBDB GRA_CLEAR_WINDOW  ;fill window by PAPER (also does MOVE 0,0)
 BBDE GRA_SET_PEN       ;in: A=color (0..15) for PLOT/LINE/WR_CHAR
 BBE1 GRA_GET_PEN       ;out: A=color (0..15)
 BBE4 GRA_SET_PAPER     ;in: A=color (0..15) for CLEAR_WINDOW/WR_CHAR
 BBE7 GRA_GET_PAPER     ;out: A=color (0..15
 BBEA GRA_PLOT_ABSOLUTE ;in: de=x, hl=y  ;\draw pixel at specified coordinate
 BBED GRA_PLOT_RELATIVE ;in: de=x, hl=y  ;/
 BBF0 GRA_TEST_ABSOLUTE ;in: de=x, hl=y, out: A=color (0..15) of pixel
 BBF3 GRA_TEST_RELATIVE ;in: de=x, hl=y, out: A=color (0..15) of pixel
 BBF6 GRA_LINE_ABSOLUTE ;in: de=x, hl=y  ;\draw line from current coordinate
 BBF9 GRA_LINE_RELATIVE ;in: de=x, hl=y  ;/to specified target coordinate
 BBFC GRA_WR_CHAR       ;in: A=char      ;-draw char at current coordinate

Screen Functions

 BBFF SCR_INITIALIZE
 BC02 SCR_RESET
 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
 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)
 BC14 SCR_MODE_CLEAR    ;clear vram, set offset=0000h, update inks
 BC17 SCR_CHAR_LIMITS   ;out: B=max_x(19,39,79), C=max_y(24)
 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
 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
 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
 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
 BC5F SCR_HORIZONTAL    ;in: A=pen, DE=x1, BC=x2, HL=y
 BC62 SCR_VERTICAL      ;in: A=pen, HL=y1, BC=y2, DE=x

Cassette (or Diskette) Functions

 BC65 CAS_INITIALIZE
 BC68 CAS_SET_SPEED     ;in: HL=upper16bit, A=lower8bit
 BC6B CAS_NOISY         ;in: A=output cassette messages (0=yes, >0=no)
 BC6E CAS_START_MOTOR   ;out: A.bit4 old motor status (0=off, 1=on), cy=0, z=1
 BC71 CAS_STOP_MOTOR    ;out: A.bit4 old motor status (0=off, 1=on), cy=0, z=1
 BC74 CAS_RESTORE_MOTOR ;in: A.bit4 new motor status (0=off, 1=on), cy=0, z=1
 BC77 CAS_IN_OPEN       ;in: HL=fname, B=fnamelen, DE=workbuf,
                        ;out: HL=header, DE=dest, BC=siz, A=type, cy=err, zf
 BC7A CAS_IN_CLOSE      ;out: DE=workbuf, cy=0=failed (no open file)
 BC7D CAS_IN_ABANDON    ;out: DE=workbuf, cy=1, z=0, A=all_closed (FFh=yes)
 BC80 CAS_IN_CHAR       ;out: A=char, cy=0=error, zf=errtype
 BC83 CAS_IN_DIRECT     ;in: HL=dest, out: HL=entrypoint, cy=0=err, zf=errtype
 BC86 CAS_RETURN        ;in: A=char (undo CAS_IN_CHAR, char back to buffer)
 BC89 CAS_TEST_EOF      ;out: CY=0=eof (end of file)
 BC8C CAS_OUT_OPEN      ;in: HL=fname, B=fnamelen, DE=workbuf, out: HL,cy,zf
 BC8F CAS_OUT_CLOSE     ;out: DE=workbuf, cy=0=failed (zf=errtype)
 BC92 CAS_OUT_ABANDON   ;out: DE=workbuf, cy=1, z=0, A=all_closed (FFh=yes)
 BC95 CAS_OUT_CHAR      ;in: A=char, out: cy=0=error, zf=errtype
 BC98 CAS_OUT_DIRECT    ;in: HL=src, DE=len, BC=entrypoint, A=type, out: cy/zf
 BC9B CAS_CATALOG       ;in: DE=workbuf, out: DE=workbuf, cy=0=error
 BC9E CAS_WRITE         ;in: HL=src, DE=len, A=ID(2Ch=header, 16h=data), out?
 BCA1 CAS_READ          ;in: HL=dest, DE=len, A=ID(2Ch=header, 16h=data), out?
 BCA4 CAS_CHECK         ;in: HL=src, DE=len, A=ID(2Ch=header, 16h=data), out?

Sound Functions

 BCA7 SOUND_RESET
 BCAA SOUND_QUEUE     ;in: HL=dat ;ch,env,ent,freq(lo,hi,noise),vol,len(lo,hi)
 BCAD SOUND_CHECK     ;in: A=channel mask, out: A=channel status
 BCB0 SOUND_ARM_EVENT
 BCB3 SOUND_RELEASE   ;in: A=channel mask
 BCB6 SOUND_PAUSE
 BCB9 SOUND_UNPAUSE
 BCBC SOUND_SET_ENV   ;in: A=number (1..15), HL=data (must be >3FFFh)
 BCBF SOUND_SET_ENT   ;in: A=number (1..15), HL=data (must be >3FFFh)
 BCC2 SOUND_GET_ENV   ;in: A=number (1..15), out: HL=data
 BCC5 SOUND_GET_ENT   ;in: A=number (1..15), out: HL=data

Kernel ROM Functions

 BCC8 KL_CHOKE_OFF
 BCCB KL_ROM_WALK
 BCCE KL_INIT_BACK
 BCD1 KL_LOG_EXT
 BCD4 KL_FIND_COMMAND

Kernel Timer/Event Functions

 BCD7 KL_NEW_FRAME_FLY
 BCDA KL_ADD_FRAME_FLY
 BCDD KL_DELETE_FRAME_FLY
 BCE0 KL_NEW_FAST_TICKER
 BCE3 KL_ADD_FAST_TICKER
 BCE6 KL_DELETE_FAST_TICKER
 BCE9 KL_ADD_TICKER
 BCEC KL_DELETE_TICKER
 BCEF KL_INIT_EVENT
 BCF2 KL_EVENT
 BCF5 KL_SYNC_RESET
 BCF8 KL_DEL_SYNCHRONOUS
 BCFB KL_NEXT_SYNC
 BCFE KL_DO_SYNC
 BD01 KL_DONE_SYNC
 BD04 KL_EVENT_DISABLE
 BD07 KL_EVENT_ENABLE
 BD0A KL_DISARM_EVENT
 BD0D KL_TIME_PLEASE     ;out: hl=low, de=high (64bit, incremented at 300Hz)
 BD10 KL_TIME_SET        ;in:  hl=low, de=high (64bit, incremented at 300Hz)

Machine Pack

 BD13 MC_BOOT_PROGRAM    ;in: HL=loader_callback, out: starts program
 BD16 MC_START_PROGRAM   ;in: HL=entrypoint (0000h=BASIC), C=ROMcfg
 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
 BD25 MC_SET_INKS        ;in: DE=ptr to border and 16 inks
 BD28 MC_RESET_PRINTER   ;out: [BDF1]=default jp opcode
 BD2B MC_PRINT_CHAR      ;in: A=char, out: CY=1=okay, CY=0=busy/timeout
 BD2E MC_BUSY_PRINTER    ;out: CY=1=busy, CY=0=ready
 BD31 MC_SEND_PRINTER    ;in: A=char, out: CY=1
 BD34 MC_SOUND_REGISTER  ;in: A=PSG index, C=PSG data
 BD37 JUMP_RESTORE       ;out: [BB00..BDCC]=defaults

Edit and Floating Point Functions (Addresses changed in each version)

 464  664  6128
 BD3A BD5B BD5E EDIT  ;io: HL=input buffer, out: CY=0=ESC (also Z=1=ESC)
 BD3D BD5E BD61 FLO_COPY [HL]=[DE], A=exponent
 BD40 BD61 BD64 FLO_int to real  ;DE=dest, HL=unsigned16bit, A.7=sign
 BD43 BD64 BD67 FLO_ 4-byte to real
 BD46 BD67 BD6A FLO_ real to int
 BD49 BD6A BD6D FLO_ round
 BD4C BD6D BD70 FLO_ FIX
 BD4F BD70 BD73 FLO_ INT
 BD52 BD73 BD76 FLO_ prepare for decimal
 BD55 BD76 BD79 FLO_ mul 10^A
 BD58 BD79 BD7C FLO_ ADD [HL]=[HL]+[DE]
 BD5B N/A  N/A  FLO_SUB1  [HL]=[HL]-[DE]
 BD5E BD7F BD82 FLO_SUB2  [HL]=[DE]-[HL] (swapped operands)
 BD61 BD82 BD85 FLO_MUL   [HL]=[HL]*[DE]
 BD64 BD85 BD88 FLO_DIV   [HL]=[HL]/[DE]
 BD67 N/A  N/A  FLO_SHIFT [HL]=[HL]*2^A
 BD6A BD8B BD8E FLO_COMPARE [HL]-[DE]
 BD6D BD8E BD91 FLO_NEG
 BD70 BD91 BD94 FLO_SGN
 BD73 BD94 BD97 FLO_DEG/RAD  ;in: A=00h=RAD, FFh=DEG
 BD76 BD97 BD9A FLO_PI    [HL]=PI
 BD79 BD9A BD9D FLO_SQRT  [HL]=[HL]^0.5
 BD7C BD9D BDA0 FLO_POT   [HL]=[HL]^[DE]
 BD7F BDA0 BDA3 FLO_LOG   [HL]=LOG([HL])
 BD82 BDA3 BDA6 FLO_LOG10 [HL]=LOG10([HL])
 BD85 BDA6 BDA9 FLO_EXP   [HL]=EXP([HL])
 BD88 BDA9 BDAC FLO_SIN   [HL]=SIN([HL])
 BD8B BDAC BDAF FLO_COS   [HL]=COS([HL])
 BD8E BDAF BDB2 FLO_TAN   [HL]=TAN([HL])
 BD91 BDB2 BDB5 FLO_ATN   [HL]=ATN([HL])
 BD94 BDB5 BDB8 FLO_5-byte to REAL
 BD97 BDB8 BDBB FLO_RND_INIT        ;seed=89656C07h
 BD9A BDBB BDBE FLO_RND_SEED        ;seed=89656C07h xor [HL]
 BD9D BD7C BD7F FLO_RND              ;\on 664/6128 these are "inserted"
 BDA0 BD88 BD8B FLO_RND last value   ;/in the above "N/A" locations

Integer Functions - 464 only (moved/replaced by other stuff on 664 and up)

 464  664  6128
 BDA3 N/A  N/A  INT_ABS  HL=ABS(HL), B.7=SIGN(HL), C=2=Mantisse, E=0=Int
 BDA6 N/A  N/A  INT_POS  HL=HL, B.7=0=Positive, C=2=Mantisse, E=0=Int
 BDA9 N/A  N/A  INT_UNDO in: HL=unsigned, B.7=sign, out: HL=signed, cy,zf
 BDAC N/A  N/A  INT_ADD  HL=HL+DE, Z=1=zero, CY=1=signed_overflow
 BDAF N/A  N/A  INT_SUB1 HL=HL-DE, Z=1=zero, CY=0=signed_overflow
 BDB2 N/A  N/A  INT_SUB2 HL=DE-HL, Z=1=zero, CY=0=signed_overflow
 BDB5 N/A  N/A  INT_MUL  HL=HL*DE
 BDB8 N/A  N/A  INT_DIV  HL=HL/DE
 BDBB N/A  N/A  INT_MOD  HL=HL MOD DE
 BDBE N/A  N/A  INT_UMUL HL=HL*DE, CY=1=unsigned_overflow
 BDC1 N/A  N/A  INT_UDIV HL=HL/DE, DE=HL MOD DE, Z=1=error (div0)
 BDC4 N/A  N/A  INT_CMP  A=SGN(HL-DE) ;00h=zero, 01h=pos, FFh=neg
 BDC7 N/A  N/A  INT_NEG  HL=-HL       ;cy=0=overflow (HL=+8000h)
 BDCA N/A  N/A  INT_SGN  A=SGN(HL)    ;00h=zero, 01h=pos, FFh=neg

Additional 664/6128 Functions

664 and up only...

 BD3A KM_SET_LOCKS_664 ;in: H=caps lock (caps), L=shift lock (ctrl caps)
 BD3D KM_FLUSH_664     ;calls KM_READ_CHAR until cy=0
 BD40 TXT_ASK_STATE_664
 BD43 GRA_DEFAULT_664       ;SCR_WRITE=?, BACK=00h,FIRST=FFh,MASK=FFh
 BD46 GRA_SET_BACK_664      ;A=background mode (FFh=transparent)
 BD49 GRA_SET_FIRST_664     ;in: A=flag (00h,FFh;1st pix of LINE)
 BD4C GRA_SET_LINE_MASK_664 ;in: A=mask
 BD4F GRA_FROM_USER_664     ;in: de=x, hl=y, out: de,hl=real x,y
 BD52 GRA_FILL_664          ;in: A=color,hl=buf,de=bufsize, out:cy=0=err
 BD55 SCR_SET_POSITION_664  ;in: A=BASE,HL=OFFSET, out: A AND C0h, HL AND 7FEh
 BD58 MC_PRINT_TRANSLATION_664

6128 and up only...

 BD5B KL_RAM_SELECT_6128  --6128 only--

Indirections (List of JUMPs into BIOS area -- LO ROM must be enabled!)

 BDCD HOOK_TXT_DRAW_CURSOR
 BDD0 HOOK_TXT_UNDRAW_CURSOR
 BDD3 HOOK_TXT_WRITE_CHAR    ;in: H=x, L=y, A=char
 BDD6 HOOK_TXT_UNWRITE       ;in: H=x, L=y, out: A=char, Z=space, cy=1=okay
 BDD9 HOOK_TXT_OUT_ACTION    ;in: A=char
 BDDC HOOK_GRA_PLOT          ;in: de=x, hl=y
 BDDF HOOK_GRA_TEST          ;in: de=x, hl=y, out: A=color
 BDE2 HOOK_GRA_LINE          ;in: de=x, hl=y
 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)
 BDEE HOOK_KM_TEST_BREAK
 BDF1 HOOK_MC_PRINT_CHAR     ;in: A=char, out: CY=1=okay, CY=0=busy/timeout
 664 and up only:
 BDF4 HOOK_KM_SCAN_KEYS_664

RSX Functions (Resident System Extensions)

 C000 (ROM Header)
 C004 Pointer to RSX Function Names ;Names end with bit7=1, list ends with 00h
 C006 List of 16bit RSX Function Addresses

Note: RSX function 3-byte FAR addresses can be retrieved via KL_FIND_COMMAND.

BASIC RSX Functions

 ;RSX Name: "BASIC"+80h ;io: DE=LORAM, HL=HIRAM

AMSDOS RSX Functions

 CPM           ;in: A=00h (no params) ;start boot sector
 DISC          ;in: A=00h (no params)
 DISC.IN       ;in: A=00h (no params) ;not supported by CPC+
 DISC.OUT      ;in: A=00h (no params) ;not supported by CPC+
 TAPE          ;in: A=00h (no params) ;not supported by VDOS
 TAPE.IN       ;in: A=00h (no params) ;not supported by VDOS and CPC+
 TAPE.OUT      ;in: A=00h (no params) ;not supported by VDOS and CPC+
 A             ;in: A=00h (no params) ;set default drive = A
 B             ;in: A=00h (no params) ;set default drive = B
 DRIVE         ;in: A=01h, [IX+0]=ptr to "A","a","B","b"     ;\not supported
 USER          ;in: A=01h, [IX+0]=user number (0000h..000Fh) ;/by VDOS
 DIR           ;in: A=00h, or A=01h, [IX+0]=ptr to "filename"
 ERA           ;in: A=01h, [IX+0]=ptr to "filename"
 REN           ;in: A=02h, [IX+0]=ptr to "oldname",[IX+2]=to "newname"

AMSDOS Hidden RSX Functions

 [C006h]  INIT             ;in/out: DE=LORAM, HL=HIRAM, CY=?
 chr(81h) MESSAGE_ON_OFF   ;in: A=flag(00h=on, >=01h=off) (R,I,C) ;out:A=old
 chr(82h) SET_DRIVE_SPEED  ;in: HL=ptr to 9 bytes
 chr(83h) SET_DISK_TYPE    ;in: A=type (0xh=IBM, 4xh=CPM, Cxh=DATA)
 chr(84h) READ_SECTOR      ;in: E=drv, D=trk, C=sec, HL=dest
 chr(85h) WRITE_SECTOR     ;in: E=drv, D=trk, C=sec, HL=src
 chr(86h) FORMAT_TRACK     ;in: E=drv, D=trk, C=sec1, HL=ptr to 9x4 byte
 chr(87h) SEEK_TRACK       ;in: E=drv, D=trk, out: cy=1=okay
 chr(88h) TEST_DRIVE       ;in: A=drv, out: cy=1=okay
 chr(89h) SET_RETRY_COUNT  ;in: A=retry count (default=10) (01h..(1)00h)