open-roms

New features

Here are the features of the Open ROMs not found in the original ROMs from the 80s (many of them are configurable during compilation):

NOTE: extra features and their syntax can change in the future!

Features missing

The following ROM features are currently missing and are not planned due to space considerations:

The following ROM features are currently missing:

Hardware support status

Keyboard


Driver Status Remarks
C64 DONE  
C128 DONE  
MEGA65 PARTIAL code mostly complete, but not tested yet


Screen


Driver Status Remarks
VIC-II DONE  
80 columns, VDC NOT DONE  
80 columns, MEGA65 PARTIAL no windowing mode and C65/M65 extra keys support


Tape port (LOAD only!)


Driver Status Remarks
normal DONE up to 202 blocks, like original ROM
turbo DONE up to 250 blocks, like the best implementations


IEC bus


Driver Status Remarks
standard DONE  
JiffyDOS PARTIAL LOAD needs improvement for better performance
ELoad v1 NOT DONE  
DolphinDOS DONE  
CIA burst mod NOT DONE  
MEGA65 burst NOT DONE  


IEEE-488 bus


Driver Status Remarks
CBM cartridge NOT DONE  


MEGA65 storage


Driver Status Remarks
SD card PARTIAL work-in-progress, can already load files
floppy drive NOT DONE  
ram disk NOT DONE  


RS-232


Driver Status Remarks
UP2400 NOT DONE  
UP9600 NOT DONE work started, not functional yet
ACIA 6551 NOT DONE  


API status

Status of the various APIs and variables from the original ROMs

Low memory locations (pages 0 - 3)

For the current status of the low memory location implementation andd usage check this file. NOTE: available vector to certain routine does not mean that this routine is fully implemented!

BASIC

Official BASIC routines


Entry Unofficial Name Status Remarks
($0003)   ADRAY1 NOT DONE  
($0005)   ADRAY2 NOT DONE  
(00300) $E38B ERROR NOT DONE  
(00302) $A483 MAIN NOT DONE some implementation exists, but not connected here
(00304) $A57C CHRNCH NOT DONE  
(00306) $A71A QPLOP NOT DONE some implementation exists, but not connected here
(00308) $A7E4 GONE NOT DONE some implementation exists, but not connected here
(0030A) $AE86 EVAL NOT DONE some implementation exists, but not connected here
($A000) $E394 cold start PARTIAL  
($A002) $E3B7 warm start PARTIAL  


Math package

Floating point mathematical routines - not official, but well known and broadly used. Note: there is an awful mess regarding naming (sometimes same name references different routines in different sources), so a custom naming scheme was applied.


Address Name Status Remarks
$A9C4 convert_FAC1_to_INT NOT DONE  
$AABC print_FAC1 NOT DONE  
$AF7B compute_TI NOT DONE  
$AF7E not named yet NOT DONE  
$AF87 not named yet NOT DONE  
$AF9A compute_ST NOT DONE  
$B1AA FACINX NOT DONE convert FAC1 to 16-bit signed integer
$B1BF convert_FAC1_to_s16 NOT DONE  
$B391 GIVAYF NOT DONE 16-bit signed integer to FAC1
$B3A2 convert_Y_to_FAC1 NOT DONE  
$B794 convert_A_to_FAC1 NOT DONE  
$B7B5 STRVAL NOT DONE imports string to FAC1
$B7F7 convert_FAC1_to_ADDR NOT DONE  
$B849 add_HALF_FAC1 DONE  
$B850 sub_MEM_FAC1 DONE  
$B853 sub_FAC2_FAC1 DONE  
$B862 add_align_exponents DONE  
$B867 add_MEM_FAC1 DONE  
$B86A add_FAC2_FAC1 DONE  
$B8FE normal_FAC1 DONE  
$B947 inv_FAC1_mantissa NOT DONE  
$B9EA log_FAC1 NOT DONE  
$BA28 mul_MEM_FAC1 DONE  
$BA2B mul_FAC2_FAC1 DONE  
$BA8C mov_MEM_FAC2 DONE  
$BA90 get_FAC2_via_INDEX NOT DONE  
$BAE2 mul10_FAC1 DONE  
$BAFE div10_FAC1_p DONE  
$BB0F div_MEM_FAC1 DONE  
$BB12 div_FAC2_FAC1 DONE  
$BBA2 mov_MEM_FAC1 DONE  
$BBA6 get_FAC2_via_INDEX NOT DONE  
$BBC7 mov_r_FAC1_TMP2 PARTIAL not fully tested yet
$BBCA mov_r_FAC1_TMP1 PARTIAL not fully tested yet
$BBD0 mov_r_FAC1_VAR PARTIAL not fully tested yet
$BBD4 mov_r_FAC1_MEM PARTIAL not fully tested yet
$BBFC mov_FAC2_FAC1 PARTIAL not fully tested yet
$BC0C mov_r_FAC1_FAC2 PARTIAL not fully tested yet
$BC0F mov_FAC1_FAC2 DONE  
$BC1B round_FAC1 PARTIAL not fully tested yet
$BC2B sgn_FAC1_A DONE  
$BC39 sgn_FAC1 NOT DONE  
$BC3C convert_A_to_FAC1 NOT DONE  
$BC44 convert_i16_to_FAC1 NOT DONE  
$BC58 abs_FAC1 NOT DONE  
$BC5B FCOMP NOT DONE compare FAC1 with RAM location
$BC9B QINT NOT DONE convert FAC1 to 32 bit signed integer
$BCCC int_FAC1 NOT DONE  
$BCF3 FIN NOT DONE imports string to FAC1, ignores spaces
$BD7E FINLOG NOT DONE  
$BDDD FOUT NOT DONE outputs FAC1 to string at $0100
$BF71 sqr_FAC1 PARTIAL needs sqr_FAC2
$BF74 sqr_FAC2 NOT DONE  
$BF78 pwr_FAC2_MEM PARTIAL needs pwr_FAC2_FAC1
$BF7B pwr_FAC2_FAC1 NOT DONE  
$BFB4 toggle_sign_FAC1 DONE  
$BFED exp_FAC1 NOT DONE  
$E043 poly1_FAC1 NOT DONE  
$E059 poly2_FAC1 NOT DONE  
$E097 rnd_FAC1 DONE  
$E09A rnd_A DONE  
$E0BE rnd_generate DONE  
$E264 cos_FAC1 NOT DONE  
$E26B sin_FAC1 NOT DONE some work already started
$E2B4 tan_FAC1 NOT DONE  
$E30E atn_FAC1 NOT DONE  


In addition to the routines, the following floating-number constants are available at their original locations:

Address Name Status Remarks
$AEA8 const_PI DONE π
$B1A5 const_NEG_32768 DONE -32768
$B9BC const_ONE DONE 1.0
$B9D6 const_INV_SQR_2 DONE 1.0 / sqr(2.0)
$B9DB const_SQR_2 DONE sqr(2.0)
$B9E0 const_NEG_HALF DONE -0.5
$B9E5 const_LOG_2 DONE log_e(2.0)
$BAF9 const_TEN DONE 10.0
$BF11 const_HALF DONE 0.5
$BFBF const_INV_LOG_2 DONE 1.0 / log_e(2.0)
$BFE8 const_ONE duplicate DONE 1.0
$E2E0 const_HALF_PI DONE PI / 2.0
$E2E5 const_DOUBLE_PI DONE PI * 2.0
$E2EA const_QUARTER DONE 0.25
$E309 const_DOUBLE_PI duplicate DONE PI * 2.0

Other unofficial BASIC routines/locations

Not all of them - only these we want to have implemented.


Address Name Status Remarks
$A004 revision str DONE  
$A408 REASON NOT DONE  
$A453 (unknown) NOT DONE  
$A533 LINKPRG DONE  
$A644 new NOT DONE  
$A659 set txt ptr NOT DONE  
$A68E RUNC DONE  
$A7AE NEWSTT PARTIAL redirected to RUN command
$AB1E STROUT DONE  
$AD9E FRMEVL PARTIAL  
$BDCD LINPRT DONE temporary implementation
$E3BF INIT NOT DONE  
$E422 INITMSG DONE  
$E453 RVECT NOT DONE  


Kernal

Official Kernal routines

NOTE: Even the ‘DONE’ routines won’t support features described as missing in one of the previous chapters!


Address Unofficial Name Status Remarks
($028F)   KEYLOG DONE  
$FF81 $FF5B CINT DONE  
$FF84 $FDA3 IOINIT DONE  
$FF87 $FD50 RAMTAS DONE  
$FF8A $FD15 RESTOR DONE  
$FF8D $FD1A VECTOR DONE  
$FF90   SETMSG DONE  
$FF93   SECOND DONE  
$FF96   TKSA DONE  
$FF99 $FE25 MEMTOP DONE  
$FF9C   MEMBOT DONE  
$FF9F   SCNKEY DONE  
$FFA2   SETTMO DONE  
$FFA5   ACPTR DONE  
$FFA8   CIOUT DONE  
$FFAB   UNTLK DONE  
$FFAE   UNLSN DONE  
$FFB1   LISTEN DONE  
$FFB4   TALK DONE  
$FFB7   READST DONE  
$FFBA   SETFLS DONE  
$FFBD   SETNAM DONE  
$FFC0 $F34A OPEN DONE  
$FFC3 $F291 CLOSE DONE  
$FFC6 $F20E CHKIN DONE  
$FFC9 $F250 CKOUT DONE  
$FFCC $F333 CLRCHN DONE  
$FFCF $F157 CHRIN PARTIAL no screen device support
$FFD2 $F1CA CHROUT DONE  
$FFD5 $F49E LOAD DONE  
($0330) $F4A5 LOAD DONE  
$FFD8 $F5DD SAVE DONE  
($0332) $F5ED SAVE DONE  
$FFDB   SETTIM DONE  
$FFDE   RDTIM DONE  
$FFE1 $F6ED STOP DONE  
$FFE4 $F13E GETIN PARTIAL no screen device support
$FFE7 $F32F CLALL DONE  
$FFEA   UDTIM DONE  
$FFED   SCREEN DONE  
$FFF0 $E50A PLOT DONE  
$FFF3   IOBASE DONE  
($FFFA)   NMI vec PARTIAL  
($FFFC) $FCE2 RESET vec DONE  
($FFFE)   IRQ/BRK vec DONE  


Unofficial Kernal routines/locations

Not all of them - only these we want to have implemented.


Address Name Status Remarks
$E518 legacy part of CINT DONE  
$E51B init screen keyboard, no VIC DONE  
$E544 clear screen DONE  
$E50C set cursor position DONE  
$E566 home cursor DONE  
$E56C set PNT and USER values DONE  
$E5A0 setup VIC II & I/O DONE  
$E6B6 advance cursor NOT DONE  
$E701 previous line NOT DONE  
$E716 screen CHROUT NOT DONE  
$E8DA color code table DONE  
$E8EA scroll logical line up DONE  
$E96C insert line on top NOT DONE  
$E9FF clear line DONE  
$EA31 default IRQ PARTIAL  
$EA7E ack CIA1 + below DONE  
$EA81 ret from IRQ/NMI DONE  
$EB48 set keyboard mapping table DONE  
$F142 get key from buffer DONE  
$F3F6 (unknown) NOT DONE  
$F646 IEC close NOT DONE  
$FD30 default vectors DONE  
$FD90 (unknown) NOT DONE  
$FE2D memtop set part DONE  
$FE47 default NMI PARTIAL  
$FE66 default BRK DONE  
$FF80 revision byte DONE  


API extensions - MEGA65 build

Note: this is likely to change in the future, possibly in an incompatible way!


Address Name Status Remarks
? MONITOR WIP launches a machine language monitor
? BOOTCPM WIP launches the CP/M operating system
? PRHEX DONE print hex value from .A
$FF7D PRIMM DONE print immediate, address compatible with C128 and C65 ROMs
$FFF8   DONE reset vector for usage within hypervisor, starts in legacy mode