diff --git a/STATUS.md b/STATUS.md
index d97aed3d..c23d642d 100644
--- a/STATUS.md
+++ b/STATUS.md
@@ -52,79 +52,109 @@ Note: vectors at `$0300` are not supported yet - for now only the locations belo
-| Address | Name | Status | Remarks |
-| :-------: | :---------------- | :------: | :------------------------------------------------: |
-| `($A000)` | cold start vector | PARTIAL | |
-| `($A002)` | warm start vector | PARTIAL | |
-| `$A483` | `MAIN` | NOT DONE | some implementation exists, but not connected here |
-| `$A57C` | `CHRNCH` | NOT DONE | |
-| `$A71A` | `QPLOP` | NOT DONE | some implementation exists, but not connected here |
-| `$A7E4` | `GONE` | NOT DONE | some implementation exists, but not connected here |
-| `$AE86` | `EVAL` | NOT DONE | some implementation exists, but not connected here |
-| `$E38B` | `ERROR` | NOT DONE | |
+| Entry | Unofficial | Name | Status | Remarks |
+| :-------: | :--------: | :--------- | :------: | :------------------------------------------------: |
+| | `$E38B` | `ERROR` | NOT DONE | |
+| | `$A483` | `MAIN` | NOT DONE | some implementation exists, but not connected here |
+| | `$A57C` | `CHRNCH` | NOT DONE | |
+| | `$A71A` | `QPLOP` | NOT DONE | some implementation exists, but not connected here |
+| | `$A7E4` | `GONE` | NOT DONE | some implementation exists, but not connected here |
+| | `$AE86` | `EVAL` | NOT DONE | some implementation exists, but not connected here |
+| `($A000)` | | cold start | PARTIAL | |
+| `($A002)` | | warm start | PARTIAL | |
+
+
+
+
+### Unofficial BASIC routines/locations
+
+Not all of them - only these we want to have implemented.
+
+
+
+| Address | Name | Status | Remarks |
+| :-------: | :----------- | :------: | :------------------------------------------------: |
+| `$A004` | revision str | DONE | |
+| `$A68E` | RUNC | NOT DONE | |
+| `$A7AE` | NEWSTT | NOT DONE | |
+| `$AB1E` | STROUT | DONE | |
+| `$BDCD` | LINPRT | NOT DONE | |
+| `$E3BF` | INIT | NOT DONE | |
+| `$E422` | INITMSG | NOT DONE | |
+| `$E453` | RVECT | NOT DONE | |
## Kernal
-
-Note: only the jump table addresses are fully supported, real routine addresses are sometimes different!
-
-
### Official Kernal routines
NOTE: Even the 'DONE' routines won't support features described as missing in one of the previous chapters!
-| Address | Name | Status | Remarks |
-| :-------: | :------- | :------: | :------------------------------------------------: |
-| `$FF81` | `CINT` | DONE | |
-| `$FF84` | `IOINIT` | PARTIAL | CIA initialization incomplete |
-| `$FF87` | `RAMTAS` | DONE | |
-| `$FF8A` | `RESTOR` | DONE | |
-| `$FF8D` | `VECTOR` | DONE | |
-| `$FF90` | `SETMSG` | DONE | |
-| `$FF93` | `SECOND` | DONE | |
-| `$FF96` | `TKSA` | DONE | |
-| `$FF99` | `MEMTOP` | DONE | |
-| `$FF9C` | `MEMBOT` | DONE | |
-| `$FF9F` | `SCNKEY` | DONE | could be better integrated with ROM (aliases) |
-| `$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` | `OPEN` | DONE | |
-| `$FFC3` | `CLOSE` | DONE | |
-| `$FFC6` | `CHKIN` | DONE | |
-| `$FFC9` | `CHKOUT` | PARTIAL | |
-| `$FFCC` | `CLRCHN` | DONE | |
-| `$FFCF` | `CHRIN` | PARTIAL | |
-| `$FFD2` | `CHROUT` | PARTIAL | |
-| `$FFD5` | `LOAD` | PARTIAL | no VERIFY support yet, no STOP key support |
-| `$FFD8` | `SAVE` | NOT DONE | |
-| `$FFDB` | `SETTIM` | DONE | |
-| `$FFDE` | `RDTIM` | DONE | |
-| `$FFE1` | `STOP` | DONE | |
-| `$FFE4` | `GETIN` | PARTIAL | only some devices supported |
-| `$FFE7` | `CLALL` | DONE | |
-| `$FFEA` | `UDTIM` | DONE | |
-| `$FFED` | `SCREEN` | DONE | |
-| `$FFF0` | `PLOT` | PARTIAL | cursor blink not handled |
-| `$FFF3` | `IOBASE` | DONE | |
-| `($FFFA)` | NMI vector | PARTIAL | |
-| `($FFFC)` | RESET vector | PARTIAL | |
-| `($FFFE)` | IRQ/BRK vector | PARTIAL | |
-
+| Address | Unofficial | Name | Status | Remarks |
+| :-------: | :--------: | :---------- | :------: | :------------------------------------------------: |
+| `$FF81` | `$FF5B` | `CINT` | DONE | |
+| `$FF84` | `$FDA3` | `IOINIT` | PARTIAL | CIA initialization incomplete |
+| `$FF87` | `$FD50` | `RAMTAS` | DONE | |
+| `$FF8A` | | `RESTOR` | DONE | |
+| `$FF8D` | `$FD15` | `VECTOR` | PARTIAL | wrong address, code starts from RESTOR |
+| `$FF90` | | `SETMSG` | DONE | |
+| `$FF93` | | `SECOND` | DONE | |
+| `$FF96` | | `TKSA` | DONE | |
+| `$FF99` | | `MEMTOP` | DONE | |
+| `$FF9C` | | `MEMBOT` | DONE | |
+| `$FF9F` | | `SCNKEY` | DONE | could be better integrated with ROM (aliases) |
+| `$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` | PARTIAL | |
+| `$FFCC` | `$F333` | `CLRCHN` | DONE | |
+| `$FFCF` | `$F157` | `CHRIN` | PARTIAL | |
+| `$FFD2` | `$F1CA` | `CHROUT` | PARTIAL | |
+| `$FFD5` | `$F4A5` | `LOAD` | PARTIAL | no VERIFY support, no STOP key, check $F49E addr |
+| `$FFD8` | `$F5ED` | `SAVE` | NOT DONE | check $F5DD location |
+| `$FFDB` | | `SETTIM` | DONE | |
+| `$FFDE` | | `RDTIM` | DONE | |
+| `$FFE1` | `$F6ED` | `STOP` | DONE | |
+| `$FFE4` | `$F13E` | `GETIN` | PARTIAL | only some devices supported |
+| `$FFE7` | `$F32F` | `CLALL` | DONE | |
+| `$FFEA` | | `UDTIM` | DONE | |
+| `$FFED` | | `SCREEN` | DONE | |
+| `$FFF0` | | `PLOT` | PARTIAL | cursor blink not handled |
+| `$FFF3` | | `IOBASE` | DONE | |
+| `($FFFA)` | | NMI vec | PARTIAL | |
+| `($FFFC)` | | RESET vec | PARTIAL | |
+| `($FFFE)` | | IRQ/BRK vec | PARTIAL | |
-### Unofficial Kernal locations
+### Unofficial Kernal routines/locations
-TODO
+Not all of them - only these we want to have implemented.
+
+
+
+| Address | Name | Status | Remarks |
+| :-------: | :--------------- | :------: | :------------------------------------------------: |
+| `$E544` | clear screen | DONE | |
+| `$E5A0` | setup VIC II | DONE | |
+| `$EA31` | default IRQ | PARTIAL | |
+| `$EA7E` | ack CIA1 + below | DONE | |
+| `$EA81` | ret from IRQ/NMI | DONE | |
+| `$FE47` | default NMI | PARTIAL | |
+| `$FE66` | default BRK | DONE | |
+| `$FF80` | revision byte | DONE | |
+
+
diff --git a/c64/basic/a68e.interop b/c64/basic/a68e.interop
new file mode 100644
index 00000000..f5ae9e65
--- /dev/null
+++ b/c64/basic/a68e.interop
@@ -0,0 +1,3 @@
+This routine is mentionned in the cartridge writing tutorial here: https://codebase64.org/doku.php?id=base:assembling_your_own_cart_rom_image
+
+We have to implement (or at least provide stub), otherwise cartridges will crash.
diff --git a/c64/basic/a68e.runc.s b/c64/basic/a68e.runc.s
new file mode 100644
index 00000000..e94d6a94
--- /dev/null
+++ b/c64/basic/a68e.runc.s
@@ -0,0 +1,5 @@
+
+// XXX provide documentation and implementation
+
+RUNC:
+ rts
diff --git a/c64/basic/a7ae.interop b/c64/basic/a7ae.interop
new file mode 100644
index 00000000..f5ae9e65
--- /dev/null
+++ b/c64/basic/a7ae.interop
@@ -0,0 +1,3 @@
+This routine is mentionned in the cartridge writing tutorial here: https://codebase64.org/doku.php?id=base:assembling_your_own_cart_rom_image
+
+We have to implement (or at least provide stub), otherwise cartridges will crash.
diff --git a/c64/basic/a7ae.newstt.s b/c64/basic/a7ae.newstt.s
new file mode 100644
index 00000000..0d01b930
--- /dev/null
+++ b/c64/basic/a7ae.newstt.s
@@ -0,0 +1,5 @@
+
+// XXX provide documentation and implementation
+
+NEWSTT:
+ rts
diff --git a/c64/basic/ab1e.print_string.s b/c64/basic/ab1e.strout.s
similarity index 75%
rename from c64/basic/ab1e.print_string.s
rename to c64/basic/ab1e.strout.s
index 360e95c5..89079894 100644
--- a/c64/basic/ab1e.print_string.s
+++ b/c64/basic/ab1e.strout.s
@@ -1,7 +1,9 @@
// Print string at $YYAA
// Compute's Mapping the 64 p101
-print_string:
+// print string routine
+
+STROUT:
// Setup pointer
sty temp_string_ptr+1
sta temp_string_ptr+0
@@ -11,14 +13,13 @@ print_string:
// Get offset ready
ldy #$00
-
-print_string_loop:
+!:
// Save Y in X, since X is preserved by chrout, but Y is not
tya
tax
lda (temp_string_ptr),y
- beq print_string_end
+ beq !+
jsr JCHROUT
@@ -26,10 +27,8 @@ print_string_loop:
tay
iny
- bne print_string_loop
-
-print_string_end:
-
+ bne !-
+!:
pla
tax
rts
diff --git a/c64/basic/bdcd.interop b/c64/basic/bdcd.interop
new file mode 100644
index 00000000..662be2c4
--- /dev/null
+++ b/c64/basic/bdcd.interop
@@ -0,0 +1 @@
+At least the FB64 (a file browser) uses this routine - but outputting number as ASCI is defintelyy useful routine, certainly much more programs use it.
diff --git a/c64/basic/bdcd.linprt.s b/c64/basic/bdcd.linprt.s
new file mode 100644
index 00000000..11e0c756
--- /dev/null
+++ b/c64/basic/bdcd.linprt.s
@@ -0,0 +1,10 @@
+
+//
+// Well-known BASIC routine, described in:
+//
+// - [CM64] Compute's Mapping the Commodore 64 - page 116, XXX
+//
+
+
+LINPRT:
+ rts // XXX implement this
diff --git a/c64/basic/e3bf.init.s b/c64/basic/e3bf.init.s
new file mode 100644
index 00000000..efb07b70
--- /dev/null
+++ b/c64/basic/e3bf.init.s
@@ -0,0 +1,5 @@
+
+// XXX provide documentation and implementation
+
+INIT:
+ rts
diff --git a/c64/basic/e3bf.interop b/c64/basic/e3bf.interop
new file mode 100644
index 00000000..f5ae9e65
--- /dev/null
+++ b/c64/basic/e3bf.interop
@@ -0,0 +1,3 @@
+This routine is mentionned in the cartridge writing tutorial here: https://codebase64.org/doku.php?id=base:assembling_your_own_cart_rom_image
+
+We have to implement (or at least provide stub), otherwise cartridges will crash.
diff --git a/c64/basic/e422.initmsg.s b/c64/basic/e422.initmsg.s
new file mode 100644
index 00000000..15f60407
--- /dev/null
+++ b/c64/basic/e422.initmsg.s
@@ -0,0 +1,5 @@
+
+// XXX provide documentation and implementation
+
+INITMSG:
+ rts
\ No newline at end of file
diff --git a/c64/basic/e422.interop b/c64/basic/e422.interop
new file mode 100644
index 00000000..f5ae9e65
--- /dev/null
+++ b/c64/basic/e422.interop
@@ -0,0 +1,3 @@
+This routine is mentionned in the cartridge writing tutorial here: https://codebase64.org/doku.php?id=base:assembling_your_own_cart_rom_image
+
+We have to implement (or at least provide stub), otherwise cartridges will crash.
diff --git a/c64/basic/e453.interop b/c64/basic/e453.interop
new file mode 100644
index 00000000..f5ae9e65
--- /dev/null
+++ b/c64/basic/e453.interop
@@ -0,0 +1,3 @@
+This routine is mentionned in the cartridge writing tutorial here: https://codebase64.org/doku.php?id=base:assembling_your_own_cart_rom_image
+
+We have to implement (or at least provide stub), otherwise cartridges will crash.
diff --git a/c64/basic/e453.rvect.s b/c64/basic/e453.rvect.s
new file mode 100644
index 00000000..5fe5ea3f
--- /dev/null
+++ b/c64/basic/e453.rvect.s
@@ -0,0 +1,5 @@
+
+// XXX provide documentation and implementation
+
+RVECT:
+ rts