Difference between revisions of "BIOS Function Summary"
From CPCWiki - THE Amstrad CPC encyclopedia!
(→Additional 664/6128 Functions) |
|||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
+ | [[Category:BIOS]] | ||
== Kernel RST Vectors == | == Kernel RST Vectors == | ||
0000 RESET (RST0/RESET) | 0000 RESET (RST0/RESET) | ||
Line 32: | Line 33: | ||
B91E KL_RAM_LDDR ;in: HL=src_end, DE=dest_end, BC=len | B91E KL_RAM_LDDR ;in: HL=src_end, DE=dest_end, BC=len | ||
B921 KL_POLL_SYNCHRONOUS | B921 KL_POLL_SYNCHRONOUS | ||
− | 664 and up only | + | '''664 and up only:''' |
B92A KL_SCAN_NEEDED_664 | B92A KL_SCAN_NEEDED_664 | ||
Latest revision as of 11:40, 19 December 2010
Contents
- 1 Kernel RST Vectors
- 2 Kernel RAM Functions
- 3 Keyboard Manager
- 4 Text Output Functions
- 5 Graphics Functions
- 6 Screen Functions
- 7 Cassette (or Diskette) Functions
- 8 Sound Functions
- 9 Kernel ROM Functions
- 10 Kernel Timer/Event Functions
- 11 Machine Pack
- 12 Edit and Floating Point Functions (Addresses changed in each version)
- 13 Integer Functions - 464 only (moved/replaced by other stuff on 664 and up)
- 14 Additional 664/6128 Functions
- 15 Indirections (List of JUMPs into BIOS area -- LO ROM must be enabled!)
- 16 RSX Functions (Resident System Extensions)
- 17 BASIC RSX Functions
- 18 AMSDOS RSX Functions
- 19 AMSDOS Hidden RSX Functions
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)