diff --git a/README.md b/README.md
index 86dc2978..fd201623 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,9 @@
# open-roms
-A project to create unencumbered open-source ROMs for use on selected retro computers. For the current status check [this document](STATUS.md)
+A project to create unencumbered open-source ROMs for use on selected retro computers. Besides this manifest, the following documents are available:
+
+* [implementation status](STATUS.md) of various APIs and functionalities
+* [configuration options](CONFIG.md) for those willing to compile their own, customized build
# Problem Statement and Motivation
diff --git a/STATUS.md b/STATUS.md
index 41e83c98..c2864db9 100644
--- a/STATUS.md
+++ b/STATUS.md
@@ -1,13 +1,13 @@
# New features
-Here are the features of the Open ROMs not found in the original ROMs from the 80s (many of them are [configurable](CONFIG.md)):
+Here are the features of the Open ROMs not found in the original ROMs from the 80s (many of them are [configurable](CONFIG.md) during compilation):
* improved keyboard scanning, resistant to ghosting and joystick interference (one variant even supports multi-keyy rollover), supports additional C128 keys
* joystick can be used to move text cursor
* pre-defined function keys
* uses RAM under ROM and I/O: 61438 bytes free
-* cold/warm start silences multiple SID chips - all $D4xx and $D5xx addresses
+* cold/warm start silences multiple SID chips - all $D4xx and $D5xx addresses, configured addresses
* wark start due to BRK prints out the instruction address
* extended `LOAD` command
* start/end addresses are displayed, in the Final cartridge style
@@ -24,7 +24,7 @@ NOTE: extra features and their syntax can change in the future!
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 inly slows down the RS-232 support for original ROMs, probably noone needs it
+* mock 6551 emulation - this only complicates the RS-232 support for original ROMs, probably noone needs it
The following ROM features are currently missing:
@@ -33,7 +33,6 @@ The following ROM features are currently missing:
* BASIC expression parsing
* floating point routines
* tape (normal mode) support
-* IEC support for SAVE
* RS-232 support
* NMI handling is incomplete
@@ -54,8 +53,6 @@ For the current status of the low memory location implementation andd usage chec
### Official BASIC routines
-Note: vectors at `$0300` are not supported yet - for now only the locations below can be used!
-
| Entry | Unofficial | Name | Status | Remarks |
@@ -140,7 +137,7 @@ NOTE: Even the 'DONE' routines won't support features described as missing in on
| `$FFD5` | `$F49E` | `LOAD` | DONE | |
| `($0330)` | `$F4A5` | `LOAD` | DONE | |
| `$FFD8` | `$F5DD` | `SAVE` | DONE | |
-| `($0332)` | `$F5ED` | `SAVE` | PARTIAL | not fully tested yet |
+| `($0332)` | `$F5ED` | `SAVE` | DONE | |
| `$FFDB` | | `SETTIM` | DONE | |
| `$FFDE` | | `RDTIM` | DONE | |
| `$FFE1` | `$F6ED` | `STOP` | DONE | |
@@ -169,7 +166,7 @@ Not all of them - only these we want to have implemented.
| `$E544` | clear screen | DONE | |
| `$E50C` | set cursor position | PARTIAL | |
| `$E566` | home cursor | NOT DONE | |
-| `$E5A0` | setup VIC II & IO | DONE | |
+| `$E5A0` | setup VIC II & I/O | DONE | |
| `$E6B6` | advance cursor | NOT DONE | |
| `$E701` | previous line | NOT DONE | |
| `$E716` | screen CHROUT | NOT DONE | |
diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom
index c31a9ff7..2760d057 100644
Binary files a/bin/basic_generic.rom and b/bin/basic_generic.rom differ
diff --git a/bin/basic_mega65.rom b/bin/basic_mega65.rom
index b3d156e9..7ed322bc 100644
Binary files a/bin/basic_mega65.rom and b/bin/basic_mega65.rom differ
diff --git a/bin/basic_testing.rom b/bin/basic_testing.rom
index af98c365..89d34c30 100644
Binary files a/bin/basic_testing.rom and b/bin/basic_testing.rom differ
diff --git a/bin/basic_ultimate64.rom b/bin/basic_ultimate64.rom
index c8caf81c..05bf4fc7 100644
Binary files a/bin/basic_ultimate64.rom and b/bin/basic_ultimate64.rom differ
diff --git a/bin/kernal_generic.rom b/bin/kernal_generic.rom
index 8be83105..74f50648 100644
Binary files a/bin/kernal_generic.rom and b/bin/kernal_generic.rom differ
diff --git a/bin/kernal_mega65.rom b/bin/kernal_mega65.rom
index 10db46b3..1808816e 100644
Binary files a/bin/kernal_mega65.rom and b/bin/kernal_mega65.rom differ
diff --git a/bin/kernal_testing.rom b/bin/kernal_testing.rom
index 118d094c..2c45f902 100644
Binary files a/bin/kernal_testing.rom and b/bin/kernal_testing.rom differ
diff --git a/bin/kernal_ultimate64.rom b/bin/kernal_ultimate64.rom
index 3ee5af04..a2b05e35 100644
Binary files a/bin/kernal_ultimate64.rom and b/bin/kernal_ultimate64.rom differ
diff --git a/c64/kernal/iec/save_iec.s b/c64/kernal/iec/save_iec.s
index f90c5f86..35f3b74f 100644
--- a/c64/kernal/iec/save_iec.s
+++ b/c64/kernal/iec/save_iec.s
@@ -4,20 +4,12 @@
//
-// XXX this is untested!
-// also test STAL/EAL - Open ROMs vs hybrid vs original
-
-
-
#if CONFIG_IEC
save_iec_dev_not_found:
jmp lvs_device_not_found_error
-save_iec_error:
- jmp lvs_device_not_found_error // XXX find a better error
-
save_iec:
@@ -40,7 +32,7 @@ save_iec:
// Send file name
jsr iec_send_file_name
- bcs save_iec_error
+ bcs save_iec_dev_not_found
// Call device to LISTEN once again
lda FA
@@ -50,9 +42,9 @@ save_iec:
lda #$61 // open channel / data (p3) , required according to p13
sta TBTCNT
jsr iec_tx_command
- bcs save_iec_error
+ bcs save_iec_dev_not_found
- // Save start address XXX optimize this
+ // Save start address
lda STAL+0
sta TBTCNT
clc
@@ -63,31 +55,26 @@ save_iec:
clc
jsr iec_tx_byte
+ jsr lvs_setup_MEMUSS
ldy #$00
iec_save_loop:
// Retrieve byte to send
#if CONFIG_MEMORY_MODEL_60K
- ldx #