Files
open-roms/STATUS.md
T

20 KiB

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):

  • improved keyboard scanning, resistant to ghosting and joystick interference (one variant even supports multi-key rollover), supports additional C128 keys

  • joystick can be used to move text cursor

  • pre-defined function keys

  • JiffyDOS and DolphinDOS protocols support

  • DOS wedge (direct mode only) - @<drive_number>, @<command>, @$, @$<params>, @

  • turbo tape load support (as device 7, or using ←L), quite sophisticated: up to 250 blocks (can store bytes under I/O), automatically adjusts for tape speed differences

  • normal tape load error log is limited by free stack space only (no artificial limitation like in original ROMs)

  • tape format autodetection; normal vs turbo is mostly transparent to user

  • improved support for tape adapters (for using regular casette players and other audio devices instead of Datasette) and emulators

  • extended LOAD command

    • start/end addresses are displayed, in the Final cartridge style
    • command with just the file name tries to use the last device if it's number seems sane; otherwise uses 8
    • secondary address over 255 is considered a start address
  • uses RAM under ROM and I/O: 61438 bytes free

  • cold/warm start silences multiple SID chips - all $D4xx and $D5xx addresses, configured addresses

  • warm start due to BRK prints out the instruction address

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:

  • full tape support - VERIFY, SAVE, sequential files; tape is considered a legacy medium, so it's support is going to be limited
  • mock 6551 emulation - this only complicates the RS-232 support for original ROMs, probably noone needs it

The following ROM features are currently missing:

  • most BASIC commands
  • BASIC variables
  • BASIC expression parsing
  • floating point routines
  • RS-232 support
  • NMI handling is incomplete

Hardware support status

Keyboard


Driver Status Remarks
C64 DONE
C128 DONE
Mega65 NOT DONE code should be complete, but is not tested yet

Screen


Driver Status Remarks
VIC-II DONE
80 columns, VDC NOT DONE
80 columns, Mega65 NOT DONE

Tape port (LOAD only!)

  • Tapuino
  • Datasette

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

IEC bus

  • SD2IEC, petSD+, µIEC
  • Pi1541, Ultimate II
  • most disk drives and printers
  • some hard drives

Driver Status Remarks
standard DONE
JiffyDOS DONE
DolphinDOS DONE
CIA burst mod NOT DONE
Mega65 burst NOT DONE

IEEE-488 bus

  • petSD+
  • PET era disk drives and printers
  • various scientific equipment

Driver Status Remarks
CBM cartridge NOT DONE

RS-232

  • modems (telephone, WiFi)
  • parallel port printers

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.


Address Name Status Remarks
$B1AA FACINX NOT DONE convert FAC1 to 16-bit signed integer
$B391 GIVAYF NOT DONE 16-bit signed integer to FAC1
$B7B5 STRVAL NOT DONE imports string to FAC1
$B850 FSUB PARTIAL needs FSUBT
$B853 FSUBT NOT DONE subtract FAC1 from FAC2
$B867 FADD PARTIAL needs FADDT
$B86A FADDT NOT DONE add FAC2 to FAC1
$B8FE NORMAL PARTIAL not tested yet
$B9EA LOG NOT DONE natural logarigthm
$BA28 FMUL PARTIAL needs FMULT
$BA2B FMULT NOT DONE multiplies FAC1 by FAC2
$BA8C CONUPK PARTIAL not fully tested yet
$BAE2 MUL10 NOT DONE multiply FAC1 by 10
$BAFE DIV10 NOT DONE divide FAC1 by 10, result is always positive
$BB0F FDIV PARTIAL needs FDIVT
$BB12 FDIVT NOT DONE divide FAC2 by FAC1, ignores sign
$BBA2 MOVFM PARTIAL not fully tested yet
$BBD4 MOVFM2 NOT DONE copy FAC1 to memory location, rounds if asked
$BBFC MOVEF NOT DONE copy FAC2 to FAC1
$BC0C MOVAF PARTIAL not fully tested
$BC0F MOVFA DONE
$BC1B ROUND PARTIAL not tested
$BC2B SIGN NOT DONE evaluate FAC1 sign
$BC39 SGN NOT DONE evaluate FAC1 sign, to FAC1
$BC58 ABS NOT DONE absolute value
$BC5B FCOMP NOT DONE compare FAC1 with RAM location
$BC9B QINT NOT DONE convert FAC1 to 32 bit signed integer
$BCCC INT NOT DONE rounds away the decimal to make an integer
$BCF3 FIN NOT DONE imports string to FAC1, ignores spaces
$BDDD FOUT NOT DONE outputs FAC1 to string at $0100
$BF71 SQR NOT DONE square root of FAC1
$BF74 SQR2 NOT DONE square root of FAC2
$BF78 FPWR NOT DONE set FAC1 as RAM raised to the power of FAC1
$BF7B FPWRT NOT DONE set FAC1 as FAC2 raised to the power of FAC1
$BFB4 NEGOP DONE
$BFED EXP NOT DONE exponential function, e raised to FAC1 power
$E043 POLY1 NOT DONE evaluate polynomial with odd powers only
$E059 POLY2 NOT DONE evaluate polynomial with odd and even powers
$E264 COS NOT DONE cosine of FAC1 in radians
$E26B SIN NOT DONE sine of FAC1 in radians
$E2B4 TAN NOT DONE tangent of FAC1 in radians
$E30E ATN NOT DONE arc tangent of FAC1

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 NOT DONE
$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
$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