BIOS Function Summary

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search

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)