diff --git a/STATUS.md b/STATUS.md index 76fbb50e..399d06c6 100644 --- a/STATUS.md +++ b/STATUS.md @@ -50,29 +50,41 @@ The following ROM features are currently missing: ## 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 | | -| turbo (250 blocks) | DONE | | +| normal | DONE | up to 202 blocks, like original ROM | +| turbo | DONE | up to 250 blocks, like the best implementations | + +
## IEC bus @@ -81,6 +93,8 @@ The following ROM features are currently missing: * most disk drives and printers * some hard drives +
+ | Driver | Status | Remarks | | :----------------: | :------: | :------------------------------------------------: | | standard | DONE | | @@ -89,27 +103,36 @@ The following ROM features are currently missing: | 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 @@ -202,19 +225,19 @@ Not all of them - only these we want to have implemented. | Address | Name | Status | Remarks | | :-------: | :----------- | :------: | :------------------------------------------------: | | `$A004` | revision str | DONE | | -| `$A408` | REASON | NOT DONE | | +| `$A408` | `REASON` | NOT DONE | | | `$A453` | (unknown) | NOT DONE | | -| `$A533` | LINKPRG | 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 | | +| `$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 | |
diff --git a/c64/kernal/banking/4000.mega65_vectable_kernal_1.s b/c64/kernal/banking/4000.mega65_vectable_kernal_1.s index 775c1f93..6c865009 100644 --- a/c64/kernal/banking/4000.mega65_vectable_kernal_1.s +++ b/c64/kernal/banking/4000.mega65_vectable_kernal_1.s @@ -11,16 +11,20 @@ // Label definitions - .label VK1__RAMTAS = $4000 + 2 * 0 - .label VK1__load_tape_normal = $4000 + 2 * 1 - .label VK1__load_tape_turbo = $4000 + 2 * 2 - .label VK1__load_tape_auto = $4000 + 2 * 3 + .label VK1__IOINIT = $4000 + 2 * 0 + .label VK1__RAMTAS = $4000 + 2 * 1 + .label VK1__setup_vicii = $4000 + 2 * 2 + .label VK1__load_tape_normal = $4000 + 2 * 3 + .label VK1__load_tape_turbo = $4000 + 2 * 4 + .label VK1__load_tape_auto = $4000 + 2 * 5 #else // Vector table (OpenROMs private!) + .word IOINIT .word RAMTAS + .word setup_vicii #if CONFIG_TAPE_NORMAL && !CONFIG_TAPE_AUTODETECT .word load_tape_normal diff --git a/c64/kernal/banking/mega65_imports.s b/c64/kernal/banking/mega65_imports.s index 3cc727e6..8546e2ce 100644 --- a/c64/kernal/banking/mega65_imports.s +++ b/c64/kernal/banking/mega65_imports.s @@ -9,11 +9,20 @@ .label STOP = KERNAL_0.STOP +.label clrchn_reset = KERNAL_0.clrchn_reset .label udtim_keyboard = KERNAL_0.udtim_keyboard +.label setup_irq_timer = KERNAL_0.setup_irq_timer .label wait_x_bars = KERNAL_0.wait_x_bars +#if CONFIG_IEC + +.label iec_set_idle = KERNAL_0.iec_set_idle + +#endif + + #if CONFIG_TAPE_NORMAL || CONFIG_TAPE_TURBO .label screen_on = KERNAL_0.screen_on diff --git a/c64/kernal/errors.s b/c64/kernal/errors.s index 91a85fe0..e1642238 100644 --- a/c64/kernal/errors.s +++ b/c64/kernal/errors.s @@ -6,90 +6,78 @@ // Kernal error codes are described in 'Commodore 64 Programmers Reference Guide', page 306 kernalerror_ROUTINE_TERMINATED: // by a STOP key + lda #K_ERR_ROUTINE_TERMINATED - sec - rts + skip_2_bytes_trash_nvz + + // FALLTROUGH kernalerror_TOO_MANY_OPEN_FILES: + lda #K_ERR_TOO_MANY_OPEN_FILES - sec - rts + skip_2_bytes_trash_nvz + + // FALLTROUGH kernalerror_FILE_ALREADY_OPEN: + lda #K_ERR_FILE_ALREADY_OPEN - sec - rts + skip_2_bytes_trash_nvz + + // FALLTROUGH kernalerror_FILE_NOT_OPEN: + lda #K_ERR_FILE_NOT_OPEN - sec - rts + skip_2_bytes_trash_nvz + + // FALLTROUGH kernalerror_FILE_NOT_FOUND: + lda #K_ERR_FILE_NOT_FOUND - sec - rts + skip_2_bytes_trash_nvz + + // FALLTROUGH kernalerror_DEVICE_NOT_FOUND: + lda #K_ERR_DEVICE_NOT_FOUND - sec - rts + skip_2_bytes_trash_nvz + + // FALLTROUGH kernalerror_FILE_NOT_INPUT: + lda #K_ERR_FILE_NOT_INPUT - sec - rts + skip_2_bytes_trash_nvz + + // FALLTROUGH kernalerror_FILE_NOT_OUTPUT: + lda #K_ERR_FILE_NOT_OUTPUT - sec - rts + skip_2_bytes_trash_nvz + + // FALLTROUGH kernalerror_FILE_NAME_MISSING: + lda #K_ERR_FILE_NAME_MISSING - sec - rts + skip_2_bytes_trash_nvz + + // FALLTROUGH kernalerror_ILLEGAL_DEVICE_NUMBER: + lda #K_ERR_ILLEGAL_DEVICE_NUMBER - sec - rts + skip_2_bytes_trash_nvz + + // FALLTROUGH kernalerror_TOP_MEM_RS232: + lda #K_ERR_TOP_MEM_RS232 + sec rts - - -// Kernal status codes are described in 'Commodore 64 Programmers Reference Guide', page 292 - -kernalstatus_reset: - lda #$00 - sta IOSTATUS - rts - -// The following two statuses are currently not implemented - and most likely not really needed - -// kernalstatus_TIMEOUT_WRITE: -// lda IOSTATUS -// ora #K_STS_TIMEOUT_WRITE -// sta IOSTATUS -// rts - -// kernalstatus_TIMEOUT_READ: -// lda IOSTATUS -// ora #K_STS_TIMEOUT_READ -// sta IOSTATUS -// rts - -kernalstatus_EOI: - lda IOSTATUS - ora #K_STS_EOI - sta IOSTATUS - rts - -kernalstatus_DEVICE_NOT_FOUND: - lda IOSTATUS - ora #K_STS_DEVICE_NOT_FOUND - sta IOSTATUS - rts diff --git a/c64/kernal/init/e5a0.setup_vicii.s b/c64/kernal/init/e5a0.setup_vicii.s index a7a3e4f4..28cc6bf9 100644 --- a/c64/kernal/init/e5a0.setup_vicii.s +++ b/c64/kernal/init/e5a0.setup_vicii.s @@ -1,5 +1,6 @@ // #LAYOUT# STD * #TAKE -// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# M65 KERNAL_0 #TAKE +// #LAYOUT# M65 KERNAL_1 #TAKE-FLOAT // #LAYOUT# * * #IGNORE // @@ -11,6 +12,14 @@ setup_vicii: +#if (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + + jsr map_KERNAL_1 + jsr_ind VK1__setup_vicii + jmp map_NORMAL + +#else + // Clear everything - turn off sprites (observed hanging around after // running programs and resetting), etc. @@ -67,3 +76,5 @@ setup_vicii: // Setup default I/O devices jmp clrchn_reset + +#endif // ROM layout diff --git a/c64/kernal/init/fda3.ioinit.s b/c64/kernal/init/fda3.ioinit.s index e0fa1ecd..72582f05 100644 --- a/c64/kernal/init/fda3.ioinit.s +++ b/c64/kernal/init/fda3.ioinit.s @@ -1,5 +1,6 @@ // #LAYOUT# STD * #TAKE -// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# M65 KERNAL_0 #TAKE +// #LAYOUT# M65 KERNAL_1 #TAKE-FLOAT // #LAYOUT# * * #IGNORE // @@ -14,6 +15,14 @@ IOINIT: +#if (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + + jsr map_KERNAL_1 + jsr_ind VK1__IOINIT + jmp map_NORMAL + +#else + // // First initialize the CPU port, to make sure we have correct memory map // @@ -146,3 +155,6 @@ IOINIT: rts #endif + + +#endif // ROM layout diff --git a/c64/kernal/status.s b/c64/kernal/status.s new file mode 100644 index 00000000..39747d00 --- /dev/null +++ b/c64/kernal/status.s @@ -0,0 +1,42 @@ +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + + +// Kernal status codes are described in 'Commodore 64 Programmers Reference Guide', page 292 + +kernalstatus_reset: + lda #$00 + beq kernalstatus_end // branch always + +// The following two statuses are currently not implemented - and most likely not really needed + +// kernalstatus_TIMEOUT_WRITE: +// +// lda IOSTATUS +// ora #K_STS_TIMEOUT_WRITE +// bne kernalstatus_end // branch always + +// kernalstatus_TIMEOUT_READ: +// +// lda IOSTATUS +// ora #K_STS_TIMEOUT_READ +// bne kernalstatus_end // branch always + +kernalstatus_EOI: + + lda IOSTATUS + ora #K_STS_EOI + bne kernalstatus_end // branch always + +kernalstatus_DEVICE_NOT_FOUND: + + lda IOSTATUS + ora #K_STS_DEVICE_NOT_FOUND + + // FALLTROUGH + +kernalstatus_end: + + sta IOSTATUS + rts