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