From f05ddef5fdcb3e98cf7c0a520a91cc8f3f5b5d10 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Mon, 30 Dec 2019 20:28:52 +0100 Subject: [PATCH 01/77] initial work towards burst IEC protocol support --- CONFIG.md | 8 +-- c64/,,config_custom.s | 11 ++-- c64/,,config_generic.s | 2 +- c64/,,config_mega65.s | 2 +- c64/,,config_testing.s | 2 +- c64/,,config_ultimate64.s | 2 +- c64/aliases/,aliases_config.s | 54 +++++++++++++-- c64/aliases/,aliases_ram_lowmem.s | 2 +- c64/kernal/assets/irq_timing_hi.s | 23 +++++++ c64/kernal/assets/irq_timing_lo.s | 23 +++++++ c64/kernal/iec/iec_cmd_open.s | 8 ++- .../iec_update_eal_by_y.s} | 2 +- c64/kernal/iec/load_iec.s | 5 +- c64/kernal/iec/save_iec.s | 5 +- c64/kernal/iec_fast/burst_cia1_detect.s | 31 +++++++++ c64/kernal/iec_fast/burst_cia2_detect.s | 66 +++++++++++++++++++ c64/kernal/iec_fast/burst_soft_detect.s | 27 ++++++++ c64/kernal/iec_fast/jiffydos_load.s | 6 +- c64/kernal/init/fda3.ioinit.s | 11 +--- c64/kernal/init/setup_pal_ntsc.s | 58 ++++++++-------- 20 files changed, 280 insertions(+), 68 deletions(-) create mode 100644 c64/kernal/assets/irq_timing_hi.s create mode 100644 c64/kernal/assets/irq_timing_lo.s rename c64/kernal/{iec_fast/iec_fast_common.s => iec/iec_update_eal_by_y.s} (80%) create mode 100644 c64/kernal/iec_fast/burst_cia1_detect.s create mode 100644 c64/kernal/iec_fast/burst_cia2_detect.s create mode 100644 c64/kernal/iec_fast/burst_soft_detect.s diff --git a/CONFIG.md b/CONFIG.md index 39dec2bd..df65d62a 100644 --- a/CONFIG.md +++ b/CONFIG.md @@ -109,10 +109,6 @@ Adds support for the IEEC bus - for serial printers, disk drives, etc. Needs over 1000 bytes in KERNAL segment. If unsure - enable. -### `CONFIG_IEC_BLANK_SCREEN` - -Causes screen blanking during some IEC operations (currently only JiffyDOS file loading) to increase the data transfer performance. - ### `CONFIG_IEC_DOLPHINDOS` Adds support for DolphinDOS fast protocol to the IEC bus, using UserPort cable. @@ -131,6 +127,10 @@ Adds support for JiffyDOS fast protocol to the IEC bus. Needs about 430 bytes in KERNAL segment. If unsure - enable. +### `CONFIG_IEC_JIFFYDOS_BLANK` + +Causes screen blanking during iffyDOS file loading to increase performance. + ### `CONFIG_TAPE_NORMAL` Adds a minimal normal (standard Commodore format) tape support - just LOAD command. diff --git a/c64/,,config_custom.s b/c64/,,config_custom.s index 2e6799c1..2911e68c 100644 --- a/c64/,,config_custom.s +++ b/c64/,,config_custom.s @@ -45,16 +45,19 @@ // I/O devices #define CONFIG_IEC -#define CONFIG_IEC_BLANK_SCREEN -#define CONFIG_IEC_DOLPHINDOS // not finished yet, but LOAD works +#define CONFIG_IEC_DOLPHINDOS #define CONFIG_IEC_DOLPHINDOS_FAST #define CONFIG_IEC_JIFFYDOS +#define CONFIG_IEC_JIFFYDOS_BLANK +// #define CONFIG_IEC_BURST_CIA1 // please keep disabled for now +// #define CONFIG_IEC_BURST_CIA2 // please keep disabled for now +// #define CONFIG_IEC_BURST_SOFT // please keep disabled for now #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO -// #define CONFIG_RS232_UP2400 // please keep disabled for now -// #define CONFIG_RS232_UP9600 // please keep disabled for now +// #define CONFIG_RS232_UP2400 // please keep disabled for now +// #define CONFIG_RS232_UP9600 // please keep disabled for now // Multiple SID support diff --git a/c64/,,config_generic.s b/c64/,,config_generic.s index 258caf5a..362566a3 100644 --- a/c64/,,config_generic.s +++ b/c64/,,config_generic.s @@ -42,10 +42,10 @@ // I/O devices #define CONFIG_IEC -#define CONFIG_IEC_BLANK_SCREEN #define CONFIG_IEC_DOLPHINDOS #define CONFIG_IEC_DOLPHINDOS_FAST #define CONFIG_IEC_JIFFYDOS +#define CONFIG_IEC_JIFFYDOS_BLANK #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO diff --git a/c64/,,config_mega65.s b/c64/,,config_mega65.s index eebb62e4..4c243094 100644 --- a/c64/,,config_mega65.s +++ b/c64/,,config_mega65.s @@ -42,10 +42,10 @@ // I/O devices #define CONFIG_IEC -#define CONFIG_IEC_BLANK_SCREEN // #define CONFIG_IEC_DOLPHINDOS // #define CONFIG_IEC_DOLPHINDOS_FAST #define CONFIG_IEC_JIFFYDOS +#define CONFIG_IEC_JIFFYDOS_BLANK // #define CONFIG_TAPE_NORMAL // #define CONFIG_TAPE_TURBO diff --git a/c64/,,config_testing.s b/c64/,,config_testing.s index 317eeed9..4e910880 100644 --- a/c64/,,config_testing.s +++ b/c64/,,config_testing.s @@ -42,10 +42,10 @@ // I/O devices #define CONFIG_IEC -// #define CONFIG_IEC_BLANK_SCREEN #define CONFIG_IEC_DOLPHINDOS // #define CONFIG_IEC_DOLPHINDOS_FAST #define CONFIG_IEC_JIFFYDOS +// #define CONFIG_IEC_JIFFYDOS_BLANK // #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO diff --git a/c64/,,config_ultimate64.s b/c64/,,config_ultimate64.s index 3d4cce51..2f2a2206 100644 --- a/c64/,,config_ultimate64.s +++ b/c64/,,config_ultimate64.s @@ -42,10 +42,10 @@ // I/O devices #define CONFIG_IEC -#define CONFIG_IEC_BLANK_SCREEN #define CONFIG_IEC_DOLPHINDOS #define CONFIG_IEC_DOLPHINDOS_FAST #define CONFIG_IEC_JIFFYDOS +#define CONFIG_IEC_JIFFYDOS_BLANK #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO diff --git a/c64/aliases/,aliases_config.s b/c64/aliases/,aliases_config.s index c9a096d9..4a375175 100644 --- a/c64/aliases/,aliases_config.s +++ b/c64/aliases/,aliases_config.s @@ -112,10 +112,15 @@ } -// Check that I/O configuration is correct + +// Check that IEC configuration is correct { -#if CONFIG_RS232_UP9600 && (CONFIG_TAPE_NORMAL || CONFIG_TAPE_TURBO) - .error "CONFIG_RS232_UP9600 is not compatible with CONFIG_TAPE_*" +#if CONFIG_IEC_JIFFYDOS && !CONFIG_IEC + .error "CONFIG_IEC_JIFFYDOS requires CONFIG_IEC" +#endif + +#if CONFIG_IEC_JIFFYDOS_BLANK && !CONFIG_IEC_JIFFYDOS + .error "CONFIG_IEC_JIFFYDOS_BLANK requires CONFIG_IEC_JIFFYDOS" #endif #if CONFIG_IEC_DOLPHINDOS && !CONFIG_IEC @@ -126,8 +131,35 @@ .error "CONFIG_IEC_DOLPHINDOS_FAST requires CONFIG_IEC_DOLPHINDOS" #endif -#if CONFIG_IEC_JIFFYDOS && !CONFIG_IEC - .error "CONFIG_IEC_JIFFYDOS requires CONFIG_IEC" +#if (CONFIG_IEC_BURST_CIA1 || CONFIG_IEC_BURST_CIA1 || CONFIG_IEC_BURST_SOFT) && !CONFIG_IEC + .error "CONFIG_IEC_BURST_* requires CONFIG_IEC" +#endif + +#if CONFIG_IEC_BURST_SOFT && !CONFIG_MB_MEGA_65 + .error "CONFIG_IEC_BURST_SOFT requires CONFIG_MB_MEGA_65" +#endif + + .var selected_iec_burst = 0; + +#if CONFIG_IEC_BURST_CIA1 + .eval selected_iec_burst++ +#endif +#if CONFIG_IEC_BURST_CIA2 + .eval selected_iec_burst++ +#endif +#if CONFIG_IEC_BURST_SOFT + .eval selected_iec_burst++ +#endif + + .if (selected_iec_burst > 1) .error "Please select at most one CONFIG_IEC_BURST_* option" +} + + + +// Check that RS-232 configuration is correct +{ +#if CONFIG_RS232_UP9600 && (CONFIG_TAPE_NORMAL || CONFIG_TAPE_TURBO) + .error "CONFIG_RS232_UP9600 is not compatible with CONFIG_TAPE_*" #endif .var selected_rs232 = 0; @@ -143,6 +175,7 @@ } + // Check that startup banner configuration is correct { .var selected = 0; @@ -322,13 +355,22 @@ #if CONFIG_IEC .var iec_features_str = "IEC" +#if CONFIG_IEC_BURST_CIA1 + .eval iec_features_str = iec_features_str + " BURST1" +#endif +#if CONFIG_IEC_BURST_CIA2 + .eval iec_features_str = iec_features_str + " BURST2" +#endif +#if CONFIG_IEC_BURST_SOFT + .eval iec_features_str = iec_features_str + " BURST" +#endif #if CONFIG_IEC_DOLPHINDOS .eval iec_features_str = iec_features_str + " DOLPHIN" #endif #if CONFIG_IEC_JIFFYDOS .eval iec_features_str = iec_features_str + " JIFFY" #endif -#if !CONFIG_IEC_DOLPHINDOS && !CONFIG_IEC_JIFFYDOS +#if !CONFIG_IEC_BURST_CIA1 && !CONFIG_IEC_BURST_CIA2 && !CONFIG_IEC_BURST_SOFT && !CONFIG_IEC_DOLPHINDOS && !CONFIG_IEC_JIFFYDOS .eval iec_features_str = iec_features_str + " NORMAL" #endif .eval features_str = ADD_FEATURE(features_str, iec_features_str) diff --git a/c64/aliases/,aliases_ram_lowmem.s b/c64/aliases/,aliases_ram_lowmem.s index c554e0de..cf1f4ee8 100644 --- a/c64/aliases/,aliases_ram_lowmem.s +++ b/c64/aliases/,aliases_ram_lowmem.s @@ -103,7 +103,7 @@ .label PTR1 = $9E // -- NOT IMPLEMENTED -- .label PTR2 = $9F // -- NOT IMPLEMENTED -- .label TIME = $A0 // $A0-$A2 jiffy clock -#if !CONFIG_IEC_JIFFYDOS && !CONFIG_IEC_DOLPHINDOS +#if !CONFIG_IEC_JIFFYDOS && !CONFIG_IEC_DOLPHINDOS && !CONFIG_IEC_BURST_CIA1 && !CONFIG_IEC_BURST_CIA2 && !CONFIG_IEC_BURST_SOFT .label TSFCNT = $A3 // temporary variable for tape and IEC, [!] our usage differs #else .label IECPROTO = $A3 // -- WIP -- [!] 0 = normal, 1 = JiffyDOS, >= $80 for unknown diff --git a/c64/kernal/assets/irq_timing_hi.s b/c64/kernal/assets/irq_timing_hi.s new file mode 100644 index 00000000..86cd851c --- /dev/null +++ b/c64/kernal/assets/irq_timing_hi.s @@ -0,0 +1,23 @@ + +// +// Values for IRQ generation timer - original idea was: +// +// (This value was calculated by running a custom IRQ handler on a C64 +// with original KERNAL, and writing the values of $DC04/5 to the screen +// in the IRQ handler to see roughly what value the timers must be set to) +// ldy #<16380 +// ldx #>16380 + +// Current values selected on the following assumptions: +// +// PAL C64 (https://codebase64.org/doku.php?id=base:cpu_clocking), +// is clocked at 0.985248 MHz, so that 1/60s is 16421 ($4025) CPU cycles +// +// NTSC C64 (https://codebase64.org/doku.php?id=base:cpu_clocking), +// is clocked at 1.022727 MHz, so that 1/60s is 17045 ($4295) CPU cycles + + +irq_timing_hi: // high bytes + + .byte >17045 // NTSC + .byte >16421 // PAL diff --git a/c64/kernal/assets/irq_timing_lo.s b/c64/kernal/assets/irq_timing_lo.s new file mode 100644 index 00000000..6f6872aa --- /dev/null +++ b/c64/kernal/assets/irq_timing_lo.s @@ -0,0 +1,23 @@ + +// +// Values for IRQ generation timer - original idea was: +// +// (This value was calculated by running a custom IRQ handler on a C64 +// with original KERNAL, and writing the values of $DC04/5 to the screen +// in the IRQ handler to see roughly what value the timers must be set to) +// ldy #<16380 +// ldx #>16380 + +// Current values selected on the following assumptions: +// +// PAL C64 (https://codebase64.org/doku.php?id=base:cpu_clocking), +// is clocked at 0.985248 MHz, so that 1/60s is 16421 ($4025) CPU cycles +// +// NTSC C64 (https://codebase64.org/doku.php?id=base:cpu_clocking), +// is clocked at 1.022727 MHz, so that 1/60s is 17045 ($4295) CPU cycles + + +irq_timing_lo: // low bytes + + .byte <17045 // NTSC + .byte <16421 // PAL diff --git a/c64/kernal/iec/iec_cmd_open.s b/c64/kernal/iec/iec_cmd_open.s index 54159d78..835ed317 100644 --- a/c64/kernal/iec/iec_cmd_open.s +++ b/c64/kernal/iec/iec_cmd_open.s @@ -17,13 +17,19 @@ iec_cmd_open: // similar to TKSA, but without turnaround !: ora #$F0 -#if CONFIG_IEC_DOLPHINDOS +#if CONFIG_IEC_DOLPHINDOS || CONFIG_IEC_BURST_CIA1 || CONFIG_IEC_BURST_CIA2 || CONFIG_IEC_BURST_SOFT sta TBTCNT jsr iec_tx_command bcs !+ // branch if error +#if CONFIG_IEC_DOLPHINDOS jsr dolphindos_detect +#endif +#if CONFIG_IEC_BURST_CIA1 || CONFIG_IEC_BURST_CIA2 || CONFIG_IEC_BURST_SOFT + jsr burst_detect +#endif + jmp iec_tx_command_finalize #else diff --git a/c64/kernal/iec_fast/iec_fast_common.s b/c64/kernal/iec/iec_update_eal_by_y.s similarity index 80% rename from c64/kernal/iec_fast/iec_fast_common.s rename to c64/kernal/iec/iec_update_eal_by_y.s index a7ce0bb6..a41a6106 100644 --- a/c64/kernal/iec_fast/iec_fast_common.s +++ b/c64/kernal/iec/iec_update_eal_by_y.s @@ -1,6 +1,6 @@ // -// Common routines for multiple IEC fact protocols +// Common EAL update routine // diff --git a/c64/kernal/iec/load_iec.s b/c64/kernal/iec/load_iec.s index d901e6a7..fabe54be 100644 --- a/c64/kernal/iec/load_iec.s +++ b/c64/kernal/iec/load_iec.s @@ -63,9 +63,10 @@ load_iec: bcs load_iec_error #if CONFIG_IEC_DOLPHINDOS - jsr dolphindos_detect - +#endif +#if CONFIG_IEC_BURST_CIA1 || CONFIG_IEC_BURST_CIA2 || CONFIG_IEC_BURST_SOFT + jsr burst_detect #endif // We are currently talker, so do the IEC turn around so that we diff --git a/c64/kernal/iec/save_iec.s b/c64/kernal/iec/save_iec.s index bd6aade5..d09e08a7 100644 --- a/c64/kernal/iec/save_iec.s +++ b/c64/kernal/iec/save_iec.s @@ -45,9 +45,10 @@ save_iec: bcs save_iec_dev_not_found #if CONFIG_IEC_DOLPHINDOS - jsr dolphindos_detect - +#endif +#if CONFIG_IEC_BURST_CIA1 || CONFIG_IEC_BURST_CIA2 || CONFIG_IEC_BURST_SOFT + jsr burst_detect #endif // Save start address diff --git a/c64/kernal/iec_fast/burst_cia1_detect.s b/c64/kernal/iec_fast/burst_cia1_detect.s new file mode 100644 index 00000000..cf36e58b --- /dev/null +++ b/c64/kernal/iec_fast/burst_cia1_detect.s @@ -0,0 +1,31 @@ + +// +// Helper routine for burst IEC protocol support +// + +// +// Based on idea by Pasi 'Albert' Ojala +// + + +#if CONFIG_IEC_BURST_CIA1 + + +burst_detect: + +#if CONFIG_IEC_JIFFYDOS || CONFIG_IEC_DOLPHINDOS + + lda IECPROTO + bmi !+ + bne burst_detect_fail // skip if other protocol already detected +!: +#endif + + panic #$FF // XXX implement this + +burst_detect_fail: + + rts + + +#endif diff --git a/c64/kernal/iec_fast/burst_cia2_detect.s b/c64/kernal/iec_fast/burst_cia2_detect.s new file mode 100644 index 00000000..19fba610 --- /dev/null +++ b/c64/kernal/iec_fast/burst_cia2_detect.s @@ -0,0 +1,66 @@ + +// +// Helper routine for burst IEC protocol support +// + +// +// Based on idea by Pasi 'Albert' Ojala +// + + +#if CONFIG_IEC_BURST_CIA2 + + +burst_detect: + +#if CONFIG_IEC_JIFFYDOS || CONFIG_IEC_DOLPHINDOS + + lda IECPROTO + bmi !+ + bne burst_detect_fail // skip if other protocol already detected +!: +#endif + + // For extra safety, do it on disabled interupts + php + sei + + // Set the clock rate to the fastest possible + ldy #$01 + sty CIA2_TIMALO + dey + sty CIA2_TIMAHI + + // Prepare registers for transfer + lda #$C1 + sta CIA2_CRA // start timer A, serial out, TOD 50Hz + bit CIA2_ICR // clear interrupt register + + // Send test byte + lda #$FF // $FF keeps DATA released, see https://www.c64-wiki.com/wiki/Fast_serial_bus_protocol + sta CIA2_SDR + + // Wait until byte sent + lda #$08 // interrupt mask +!: + bit CIA2_ICR + beq !- + + // Now see if we get any byte back + + lda CIA2_SDR // XXX we do not need a value, we need to know if it was received + + + panic #$00 // XXX finish this routine + + + plp + + // FALLTROUGH + +burst_detect_fail: + + rts + + +#endif diff --git a/c64/kernal/iec_fast/burst_soft_detect.s b/c64/kernal/iec_fast/burst_soft_detect.s new file mode 100644 index 00000000..cd31a19e --- /dev/null +++ b/c64/kernal/iec_fast/burst_soft_detect.s @@ -0,0 +1,27 @@ + +// +// Helper routine for burst IEC protocol support +// + + +#if CONFIG_IEC_BURST_SOFT + + +burst_detect: + +#if CONFIG_IEC_JIFFYDOS || CONFIG_IEC_DOLPHINDOS + + lda IECPROTO + bmi !+ + bne burst_detect_fail // skip if other protocol already detected +!: +#endif + + panic #$FF // XXX implement this + +burst_detect_fail: + + rts + + +#endif diff --git a/c64/kernal/iec_fast/jiffydos_load.s b/c64/kernal/iec_fast/jiffydos_load.s index 5b6ca0c4..bd83e271 100644 --- a/c64/kernal/iec_fast/jiffydos_load.s +++ b/c64/kernal/iec_fast/jiffydos_load.s @@ -20,7 +20,7 @@ jiffydos_load: // Timing is critical, do not allow interrupts sei -#if CONFIG_IEC_BLANK_SCREEN +#if CONFIG_IEC_JIFFYDOS_BLANK // Preserve register with screen status (blank/visibe) lda VIC_SCROLY @@ -57,7 +57,7 @@ jiffydos_load_loop: lda CIA2_PRA and #$FF - BIT_CIA2_PRA_DAT_OUT // release -#if CONFIG_IEC_BLANK_SCREEN +#if CONFIG_IEC_JIFFYDOS_BLANK // It seems JiffyDOS needs some time here; waste few cycles nop @@ -143,7 +143,7 @@ jiffydos_load_end: lda #$01 sta IECPROTO -#if CONFIG_IEC_BLANK_SCREEN +#if CONFIG_IEC_JIFFYDOS_BLANK // Restore screen state lda TBTCNT diff --git a/c64/kernal/init/fda3.ioinit.s b/c64/kernal/init/fda3.ioinit.s index 59fa824d..0ca661f9 100644 --- a/c64/kernal/init/fda3.ioinit.s +++ b/c64/kernal/init/fda3.ioinit.s @@ -110,8 +110,6 @@ IOINIT: lda #$3F sta CIA2_DDRA // $DD02 - // XXX detect TOD clock, see https://codebase64.org/doku.php?id=base:efficient_tod_initialisation - // XXX how to initialize these timers??? // stx CIA1_CRB // $DC0F // stx CIA2_CRA // $DD0E @@ -123,13 +121,8 @@ IOINIT: ldx #%00000111 // XXX adapt this to IEC idle state, JMP at the end won't be needed stx CIA2_PRA // $DD00 - // - - ldy #<16421 - ldx #>16421 - - sty CIA1_TIMALO // $DC04 - stx CIA1_TIMAHI // $DC05 + // Put something sane in the IRQ timer + jsr setup_irq_timer // Enable timer A to run continuously (http://codebase64.org/doku.php?id=base:timerinterrupts) ldx #$11 diff --git a/c64/kernal/init/setup_pal_ntsc.s b/c64/kernal/init/setup_pal_ntsc.s index 99668527..101cf716 100644 --- a/c64/kernal/init/setup_pal_ntsc.s +++ b/c64/kernal/init/setup_pal_ntsc.s @@ -23,43 +23,39 @@ setup_pal_ntsc: setup_pal: - // Set timer interval to ~1/60th of a second - - // (This value was calculated by running a custom IRQ handler on a C64 - // with original KERNAL, and writing the values of $DC04/5 to the screen - // in the IRQ handler to see roughly what value the timers must be set to) - // ldy #<16380 - // ldx #>16380 - - // PAL C64 (https://codebase64.org/doku.php?id=base:cpu_clocking), - // is clocked at 0.985248 MHz, so that 1/60s is 16421 ($4025) CPU cycles - - ldy #<16421 - ldx #>16421 - lda #$01 + skip_2_bytes_trash_nvz + + // FALLTROUGH + +setup_ntsc: + + lda #$00 // FALLTROUGH setup_pal_ntsc_end: - sty CIA1_TIMALO // $DC04 - stx CIA1_TIMAHI // $DC05 - sta TVSFLG + // FALLTROUGH + +setup_irq_timer: // entry point needed by UP9600 and CIA1 burst mod support + + // Sets up IRQ timer in CIA1 to ~1/60th of a second, + // depending on the detected video system + + // Retrieve video system (0 - NTSC, 1 - PAL), assume PAL for unknown values + + ldx TVSFLG + beq !+ + ldx #$01 +!: + // Setup interval for timer A in CIA1 + + lda irq_timing_lo, x + sta CIA1_TIMALO // $DC04 + lda irq_timing_hi, x + sta CIA1_TIMAHI // $DC05 + rts - -setup_ntsc: - - // Set timer interval to ~1/60th of a second - - // NTSC C64 (https://codebase64.org/doku.php?id=base:cpu_clocking), - // is clocked at 1.022727 MHz, so that 1/60s is 17045 ($4295) CPU cycles - - ldy #<17045 - ldx #>17045 - - lda #$00 - - beq setup_pal_ntsc_end // branch always From 465753b0a25a7ca7ceba124b726e223b94307c91 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Mon, 30 Dec 2019 21:06:34 +0100 Subject: [PATCH 02/77] improved tape adapters support --- CONFIG.md | 8 ++++++ Makefile | 2 +- STATUS.md | 1 + c64/,,config_custom.s | 2 ++ c64/,,config_generic.s | 2 ++ c64/,,config_mega65.s | 2 ++ c64/,,config_testing.s | 2 ++ c64/,,config_ultimate64.s | 2 ++ c64/kernal/iec/iec_wait1ms.s | 4 +-- c64/kernal/tape/tape_common.s | 48 +++++++++++++++++++++++++++++++++-- 10 files changed, 68 insertions(+), 5 deletions(-) diff --git a/CONFIG.md b/CONFIG.md index df65d62a..90d9b076 100644 --- a/CONFIG.md +++ b/CONFIG.md @@ -143,6 +143,14 @@ Adds a minimal turbo tape support - just LOAD command (device 7, like on _Action Needs about 650 bytes in KERNAL segment (if both normal and turbo are enabled, about 950 bytes are needed, as they share some code). If unsure - enable. +### `CONFIG_TAPE_NO_KEY_SENSE` + +Enable this option if you are using a tape interface adapter with some audio signal source connected. These adapters lack key sense functionality, so the computer is unable to tell whether Play got pressed or not - with this option ROM will assume Play got pressed after imppulses start arriving from the tape. + +### `CONFIG_TAPE_NO_MOTOR_CONTROL` + +Enable this option if you are using a tape interface adapter lacking tape motor control (most likely every adapter currently being sold) - this will eliminate the need to quickly press space when the program header information gets displayed. Note: if you are using a cassette player with REM port, and your adapter is connected to this port too, than you do not need this option. + ## Multiple SID support The SID is a sound chip - original machine had one installed. However, mods exists to add more of them for improved sound capabilitiee. Emulators and FPGA machines typically allow to simulate more than one too. Unfortunately, there is no standard regarding how these additional chips are visible in the processor address space, and there is no sane way to detect it - thus, it has to be configurable. diff --git a/Makefile b/Makefile index 6e5edbf5..1071b379 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ # Test files TESTDISK = testsuite/testdisk.d64 -TESTTAPE = testsuite/testtape-c64-pal-normal.tap +TESTTAPE = testsuite/testtape-c64-pal-turbo.tap # Source files diff --git a/STATUS.md b/STATUS.md index 865001d7..9787b0a2 100644 --- a/STATUS.md +++ b/STATUS.md @@ -13,6 +13,7 @@ Here are the features of the Open ROMs not found in the original ROMs from the 8 * DOS wedge (direct mode only) - `@`, `@`, `@$`, `@$`, `@` * turbo tape load support (as device 7, or using `←L`), up to 250 blocks (can store bytes under I/O) +* improved support for tape adapters (for using regular casette players and other audio devices instead of Datasette) * extended `LOAD` command * start/end addresses are displayed, in the Final cartridge style diff --git a/c64/,,config_custom.s b/c64/,,config_custom.s index 2911e68c..192d682a 100644 --- a/c64/,,config_custom.s +++ b/c64/,,config_custom.s @@ -55,6 +55,8 @@ #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO +// #define CONFIG_TAPE_NO_KEY_SENSE +// #define CONFIG_TAPE_NO_MOTOR_CONTROL // #define CONFIG_RS232_UP2400 // please keep disabled for now // #define CONFIG_RS232_UP9600 // please keep disabled for now diff --git a/c64/,,config_generic.s b/c64/,,config_generic.s index 362566a3..84cd3ea7 100644 --- a/c64/,,config_generic.s +++ b/c64/,,config_generic.s @@ -49,6 +49,8 @@ #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO +// #define CONFIG_TAPE_NO_KEY_SENSE +// #define CONFIG_TAPE_NO_MOTOR_CONTROL // Multiple SID support diff --git a/c64/,,config_mega65.s b/c64/,,config_mega65.s index 4c243094..99a7306c 100644 --- a/c64/,,config_mega65.s +++ b/c64/,,config_mega65.s @@ -49,6 +49,8 @@ // #define CONFIG_TAPE_NORMAL // #define CONFIG_TAPE_TURBO +// #define CONFIG_TAPE_NO_KEY_SENSE +// #define CONFIG_TAPE_NO_MOTOR_CONTROL // Multiple SID support diff --git a/c64/,,config_testing.s b/c64/,,config_testing.s index 4e910880..a3c38560 100644 --- a/c64/,,config_testing.s +++ b/c64/,,config_testing.s @@ -49,6 +49,8 @@ // #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO +// #define CONFIG_TAPE_NO_KEY_SENSE +// #define CONFIG_TAPE_NO_MOTOR_CONTROL // Multiple SID support diff --git a/c64/,,config_ultimate64.s b/c64/,,config_ultimate64.s index 2f2a2206..07a981c0 100644 --- a/c64/,,config_ultimate64.s +++ b/c64/,,config_ultimate64.s @@ -49,6 +49,8 @@ #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO +// #define CONFIG_TAPE_NO_KEY_SENSE +// #define CONFIG_TAPE_NO_MOTOR_CONTROL // Multiple SID support diff --git a/c64/kernal/iec/iec_wait1ms.s b/c64/kernal/iec/iec_wait1ms.s index 9e550f35..4e81fb14 100644 --- a/c64/kernal/iec/iec_wait1ms.s +++ b/c64/kernal/iec/iec_wait1ms.s @@ -16,7 +16,7 @@ iec_wait1ms: ldx #18 // we probably won't start with the beginning of raster #endif // CONFIG_IEC -#if CONFIG_IEC || CONFIG_TAPE_TURBO || CONFIG_TAPE_NORMAL +#if CONFIG_IEC || (!CONFIG_TAPE_NO_MOTOR_CONTROL && (CONFIG_TAPE_TURBO || CONFIG_TAPE_NORMAL)) wait_x_bars: // additional entry point for tape support // has to preserve .Y and put .X to 0 @@ -34,4 +34,4 @@ iec_wait_rts: // dummy RTS, for very short waits rts -#endif // CONFIG_IEC || CONFIG_TAPE_TURBO || CONFIG_TAPE_NORMAL +#endif diff --git a/c64/kernal/tape/tape_common.s b/c64/kernal/tape/tape_common.s index a74db3af..ee56f8ac 100644 --- a/c64/kernal/tape/tape_common.s +++ b/c64/kernal/tape/tape_common.s @@ -28,12 +28,16 @@ tape_ask_play: sei // timing is critical for tape loading +#if !CONFIG_TAPE_NO_KEY_SENSE + // First check whether the button is already pressed lda CPU_R6510 and #$10 beq tape_wait_play_done +#endif + // Display message ldx #__MSG_KERNAL_PRESS_PLAY @@ -41,6 +45,8 @@ tape_ask_play: // FALLTROUGH +#if !CONFIG_TAPE_NO_KEY_SENSE + tape_wait_play_loop: jsr udtim_keyboard @@ -51,6 +57,26 @@ tape_wait_play_loop: and #$10 // check for pressed button bne tape_wait_play_loop + // FALLTROUGH + +#else + + // We have no key sense - so just turn the motor on and wait for the first pulse + + jsr tape_motor_on + + lda #$10 +!: + bit CIA1_ICR // $DC0D + bne !- +!: + bit CIA1_ICR // $DC0D + beq !- + +#endif + + // FALLTROUGH + tape_wait_play_done: // Prepare for reading @@ -68,8 +94,12 @@ tape_wait_play_done: tape_handle_header: +#if !CONFIG_TAPE_NO_MOTOR_CONTROL + jsr tape_screen_on_motor_off +#endif + // Print FOUND + file name ldx #__MSG_KERNAL_FOUND @@ -83,11 +113,15 @@ tape_handle_header: cpy #$15 bne !- +#if !CONFIG_TAPE_NO_MOTOR_CONTROL + // Header, wait for user decision jsr tape_header_get_decision bcs tape_break_error +#endif + // Check if file name matches jsr tape_match_filename @@ -151,14 +185,20 @@ tape_handle_header: jsr lvs_display_loading_verifying + // FALLTROUGH + +#if !CONFIG_TAPE_NO_MOTOR_CONTROL + tape_handle_header_displayed: // Load the file jsr tape_screen_off_motor_on - + // FALLTROUGH +#endif + tape_return_ok: clc @@ -211,6 +251,8 @@ tape_match_loop: rts +#if !CONFIG_TAPE_NO_MOTOR_CONTROL + // // Get user decision whether to load the file or not // @@ -223,7 +265,7 @@ tape_header_get_decision: lda STKEY bpl tape_header_wait_stop // STOP pressed and #$10 - beq tape_header_wait_space // space pressed + beq tape_header_wait_space // SPACE pressed ldx #$80 jsr wait_x_bars // sets .X to 0 @@ -245,6 +287,8 @@ tape_header_wait_stop: sec rts +#endif + // // Report that file loading succeeded (or not) From 58b21e3fa49d6109707bf3bbe1c99e4528f94d63 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Tue, 31 Dec 2019 17:31:25 +0100 Subject: [PATCH 03/77] more work towards IEC burst support --- CONFIG.md | 2 +- STATUS.md | 3 +- c64/kernal/iec/iec_cmd_open.s | 13 ++++---- c64/kernal/iec/load_iec.s | 7 ++-- c64/kernal/iec/save_iec.s | 7 ++-- c64/kernal/iec_fast/burst_cia1_advertise.s | 33 +++++++++++++++++++ c64/kernal/iec_fast/burst_cia1_detect.s | 31 ----------------- ...t_cia2_detect.s => burst_cia2_advertise.s} | 29 ++++++---------- c64/kernal/iec_fast/burst_soft_advertise.s | 28 ++++++++++++++++ c64/kernal/iec_fast/burst_soft_detect.s | 27 --------------- c64/kernal/iec_fast/dolphindos_detect.s | 7 ---- 11 files changed, 88 insertions(+), 99 deletions(-) create mode 100644 c64/kernal/iec_fast/burst_cia1_advertise.s delete mode 100644 c64/kernal/iec_fast/burst_cia1_detect.s rename c64/kernal/iec_fast/{burst_cia2_detect.s => burst_cia2_advertise.s} (58%) create mode 100644 c64/kernal/iec_fast/burst_soft_advertise.s delete mode 100644 c64/kernal/iec_fast/burst_soft_detect.s diff --git a/CONFIG.md b/CONFIG.md index 90d9b076..53ad6421 100644 --- a/CONFIG.md +++ b/CONFIG.md @@ -129,7 +129,7 @@ Needs about 430 bytes in KERNAL segment. If unsure - enable. ### `CONFIG_IEC_JIFFYDOS_BLANK` -Causes screen blanking during iffyDOS file loading to increase performance. +Causes screen blanking during JiffyDOS file loading to increase performance. ### `CONFIG_TAPE_NORMAL` diff --git a/STATUS.md b/STATUS.md index 9787b0a2..1697e3ef 100644 --- a/STATUS.md +++ b/STATUS.md @@ -8,8 +8,7 @@ Here are the features of the Open ROMs not found in the original ROMs from the 8 * joystick can be used to move text cursor * pre-defined function keys -* JiffyDOS protocol support -* partial DolphinDOS protocol support +* JiffyDOS and DolphinDOS protocols support * DOS wedge (direct mode only) - `@`, `@`, `@$`, `@$`, `@` * turbo tape load support (as device 7, or using `←L`), up to 250 blocks (can store bytes under I/O) diff --git a/c64/kernal/iec/iec_cmd_open.s b/c64/kernal/iec/iec_cmd_open.s index 835ed317..78d5364b 100644 --- a/c64/kernal/iec/iec_cmd_open.s +++ b/c64/kernal/iec/iec_cmd_open.s @@ -17,18 +17,19 @@ iec_cmd_open: // similar to TKSA, but without turnaround !: ora #$F0 -#if CONFIG_IEC_DOLPHINDOS || CONFIG_IEC_BURST_CIA1 || CONFIG_IEC_BURST_CIA2 || CONFIG_IEC_BURST_SOFT +#if CONFIG_IEC_BURST_CIA1 || CONFIG_IEC_BURST_CIA2 || CONFIG_IEC_BURST_SOFT + pha + jsr burst_advertise + pla +#endif + +#if CONFIG_IEC_DOLPHINDOS sta TBTCNT jsr iec_tx_command bcs !+ // branch if error -#if CONFIG_IEC_DOLPHINDOS jsr dolphindos_detect -#endif -#if CONFIG_IEC_BURST_CIA1 || CONFIG_IEC_BURST_CIA2 || CONFIG_IEC_BURST_SOFT - jsr burst_detect -#endif jmp iec_tx_command_finalize diff --git a/c64/kernal/iec/load_iec.s b/c64/kernal/iec/load_iec.s index fabe54be..65db83b3 100644 --- a/c64/kernal/iec/load_iec.s +++ b/c64/kernal/iec/load_iec.s @@ -57,6 +57,10 @@ load_iec: jsr TALK bcs load_iec_error +#if CONFIG_IEC_BURST_CIA1 || CONFIG_IEC_BURST_CIA2 || CONFIG_IEC_BURST_SOFT + jsr burst_advertise +#endif + lda #$60 // open channel / data (p3) , required according to p13 sta TBTCNT jsr iec_tx_command @@ -65,9 +69,6 @@ load_iec: #if CONFIG_IEC_DOLPHINDOS jsr dolphindos_detect #endif -#if CONFIG_IEC_BURST_CIA1 || CONFIG_IEC_BURST_CIA2 || CONFIG_IEC_BURST_SOFT - jsr burst_detect -#endif // We are currently talker, so do the IEC turn around so that we // are the listener (p16) diff --git a/c64/kernal/iec/save_iec.s b/c64/kernal/iec/save_iec.s index d09e08a7..03923d00 100644 --- a/c64/kernal/iec/save_iec.s +++ b/c64/kernal/iec/save_iec.s @@ -39,6 +39,10 @@ save_iec: jsr LISTEN bcs save_iec_dev_not_found +#if CONFIG_IEC_BURST_CIA1 || CONFIG_IEC_BURST_CIA2 || CONFIG_IEC_BURST_SOFT + jsr burst_advertise +#endif + lda #$61 // open channel / data (p3) , required according to p13 sta TBTCNT jsr iec_tx_command @@ -47,9 +51,6 @@ save_iec: #if CONFIG_IEC_DOLPHINDOS jsr dolphindos_detect #endif -#if CONFIG_IEC_BURST_CIA1 || CONFIG_IEC_BURST_CIA2 || CONFIG_IEC_BURST_SOFT - jsr burst_detect -#endif // Save start address lda STAL+0 diff --git a/c64/kernal/iec_fast/burst_cia1_advertise.s b/c64/kernal/iec_fast/burst_cia1_advertise.s new file mode 100644 index 00000000..e233c3d6 --- /dev/null +++ b/c64/kernal/iec_fast/burst_cia1_advertise.s @@ -0,0 +1,33 @@ + +// +// Advertise burst IEC protocol support to the receiver +// + +// +// Based on idea by Pasi 'Albert' Ojala and description from +// https://sites.google.com/site/h2obsession/CBM/C128/fast-serial-for-uiec +// + + +#if CONFIG_IEC_BURST_CIA1 + + +burst_advertise: + +#if CONFIG_IEC_JIFFYDOS + + // Skip if other protocol (only JiffyDOS is possible at this moment) already detected + lda IECPROTO + bmi !+ + bne burst_advertise_done +!: +#endif + + panic #$FF // XXX implement this + +burst_advertise_done: + + rts + + +#endif diff --git a/c64/kernal/iec_fast/burst_cia1_detect.s b/c64/kernal/iec_fast/burst_cia1_detect.s deleted file mode 100644 index cf36e58b..00000000 --- a/c64/kernal/iec_fast/burst_cia1_detect.s +++ /dev/null @@ -1,31 +0,0 @@ - -// -// Helper routine for burst IEC protocol support -// - -// -// Based on idea by Pasi 'Albert' Ojala -// - - -#if CONFIG_IEC_BURST_CIA1 - - -burst_detect: - -#if CONFIG_IEC_JIFFYDOS || CONFIG_IEC_DOLPHINDOS - - lda IECPROTO - bmi !+ - bne burst_detect_fail // skip if other protocol already detected -!: -#endif - - panic #$FF // XXX implement this - -burst_detect_fail: - - rts - - -#endif diff --git a/c64/kernal/iec_fast/burst_cia2_detect.s b/c64/kernal/iec_fast/burst_cia2_advertise.s similarity index 58% rename from c64/kernal/iec_fast/burst_cia2_detect.s rename to c64/kernal/iec_fast/burst_cia2_advertise.s index 19fba610..3081f000 100644 --- a/c64/kernal/iec_fast/burst_cia2_detect.s +++ b/c64/kernal/iec_fast/burst_cia2_advertise.s @@ -1,29 +1,30 @@ // -// Helper routine for burst IEC protocol support +// Advertise burst IEC protocol support to the receiver // // -// Based on idea by Pasi 'Albert' Ojala +// Based on idea by Pasi 'Albert' Ojala and description from +// https://sites.google.com/site/h2obsession/CBM/C128/fast-serial-for-uiec // #if CONFIG_IEC_BURST_CIA2 -burst_detect: +burst_advertise: -#if CONFIG_IEC_JIFFYDOS || CONFIG_IEC_DOLPHINDOS +#if CONFIG_IEC_JIFFYDOS + // Skip if other protocol (only JiffyDOS is possible at this moment) already detected lda IECPROTO bmi !+ - bne burst_detect_fail // skip if other protocol already detected + bne burst_advertise_done !: #endif - // For extra safety, do it on disabled interupts - php - sei + // Make sure this is not done under ATN + jst iec_release_atn // Set the clock rate to the fastest possible ldy #$01 @@ -46,19 +47,9 @@ burst_detect: bit CIA2_ICR beq !- - // Now see if we get any byte back - - lda CIA2_SDR // XXX we do not need a value, we need to know if it was received - - - panic #$00 // XXX finish this routine - - - plp - // FALLTROUGH -burst_detect_fail: +burst_advertise_done: rts diff --git a/c64/kernal/iec_fast/burst_soft_advertise.s b/c64/kernal/iec_fast/burst_soft_advertise.s new file mode 100644 index 00000000..90625451 --- /dev/null +++ b/c64/kernal/iec_fast/burst_soft_advertise.s @@ -0,0 +1,28 @@ + +// +// Advertise burst IEC protocol support to the receiver +// + + +#if CONFIG_IEC_BURST_SOFT + + +burst_advertise: + +#if CONFIG_IEC_JIFFYDOS + + // Skip if other protocol (only JiffyDOS is possible at this moment) already detected + lda IECPROTO + bmi !+ + bne burst_advertise_done: +!: +#endif + + panic #$FF // XXX implement this + +burst_advertise_done: + + rts + + +#endif diff --git a/c64/kernal/iec_fast/burst_soft_detect.s b/c64/kernal/iec_fast/burst_soft_detect.s deleted file mode 100644 index cd31a19e..00000000 --- a/c64/kernal/iec_fast/burst_soft_detect.s +++ /dev/null @@ -1,27 +0,0 @@ - -// -// Helper routine for burst IEC protocol support -// - - -#if CONFIG_IEC_BURST_SOFT - - -burst_detect: - -#if CONFIG_IEC_JIFFYDOS || CONFIG_IEC_DOLPHINDOS - - lda IECPROTO - bmi !+ - bne burst_detect_fail // skip if other protocol already detected -!: -#endif - - panic #$FF // XXX implement this - -burst_detect_fail: - - rts - - -#endif diff --git a/c64/kernal/iec_fast/dolphindos_detect.s b/c64/kernal/iec_fast/dolphindos_detect.s index 3f622482..0975785c 100644 --- a/c64/kernal/iec_fast/dolphindos_detect.s +++ b/c64/kernal/iec_fast/dolphindos_detect.s @@ -20,13 +20,6 @@ dolphindos_detect: -#if CONFIG_IEC_JIFFYDOS - - lda IECPROTO - bne dolphindos_detect_fail // skip if other protocol already detected - -#endif - // Make sure the port settings are correct lda #$7F From 2975b171be3487a039455cfd4de405b4bd7f3089 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Tue, 31 Dec 2019 17:38:34 +0100 Subject: [PATCH 04/77] added definition for Mega65 CPU --- CONFIG.md | 4 ++++ c64/,,config_custom.s | 1 + c64/,,config_generic.s | 1 + c64/,,config_mega65.s | 3 ++- c64/,,config_testing.s | 1 + c64/,,config_ultimate64.s | 1 + c64/aliases/,aliases_config.s | 3 +++ c64/aliases/,aliases_cpu.s | 4 ++-- 8 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CONFIG.md b/CONFIG.md index 53ad6421..c1f56871 100644 --- a/CONFIG.md +++ b/CONFIG.md @@ -74,6 +74,10 @@ Choose if your CPU supports the Commodore Semiconductor Group 65CE02 instruction It enables some speed/size code optimizations. +### `CONFIG_CPU_M65_45GS02` + +Choose if you have a Mega65 FPGA board. + ### `CONFIG_CPU_WDC_65816` Choose if your CPU supports the 16-bit Western Design Center 65816 instruction set, like: diff --git a/c64/,,config_custom.s b/c64/,,config_custom.s index 192d682a..95bfda75 100644 --- a/c64/,,config_custom.s +++ b/c64/,,config_custom.s @@ -33,6 +33,7 @@ #define CONFIG_CPU_MOS_6502 // #define CONFIG_CPU_WDC_65C02 // #define CONFIG_CPU_CSG_65CE02 +// #define CONFIG_CPU_M65_45GS02 // #define CONFIG_CPU_WDC_65816 diff --git a/c64/,,config_generic.s b/c64/,,config_generic.s index 84cd3ea7..4195ef46 100644 --- a/c64/,,config_generic.s +++ b/c64/,,config_generic.s @@ -30,6 +30,7 @@ #define CONFIG_CPU_MOS_6502 // #define CONFIG_CPU_WDC_65C02 // #define CONFIG_CPU_CSG_65CE02 +// #define CONFIG_CPU_M65_45GS02 // #define CONFIG_CPU_WDC_65816 diff --git a/c64/,,config_mega65.s b/c64/,,config_mega65.s index 99a7306c..07259720 100644 --- a/c64/,,config_mega65.s +++ b/c64/,,config_mega65.s @@ -29,7 +29,8 @@ // #define CONFIG_CPU_MOS_6502 // #define CONFIG_CPU_WDC_65C02 -#define CONFIG_CPU_CSG_65CE02 +// #define CONFIG_CPU_CSG_65CE02 +#define CONFIG_CPU_M65_45GS02 // #define CONFIG_CPU_WDC_65816 diff --git a/c64/,,config_testing.s b/c64/,,config_testing.s index a3c38560..0f7a164f 100644 --- a/c64/,,config_testing.s +++ b/c64/,,config_testing.s @@ -30,6 +30,7 @@ #define CONFIG_CPU_MOS_6502 // #define CONFIG_CPU_WDC_65C02 // #define CONFIG_CPU_CSG_65CE02 +// #define CONFIG_CPU_M65_45GS02 // #define CONFIG_CPU_WDC_65816 diff --git a/c64/,,config_ultimate64.s b/c64/,,config_ultimate64.s index 07a981c0..f2927c60 100644 --- a/c64/,,config_ultimate64.s +++ b/c64/,,config_ultimate64.s @@ -30,6 +30,7 @@ #define CONFIG_CPU_MOS_6502 // #define CONFIG_CPU_WDC_65C02 // #define CONFIG_CPU_CSG_65CE02 +// #define CONFIG_CPU_M65_45GS02 // #define CONFIG_CPU_WDC_65816 diff --git a/c64/aliases/,aliases_config.s b/c64/aliases/,aliases_config.s index 4a375175..cfb0a39c 100644 --- a/c64/aliases/,aliases_config.s +++ b/c64/aliases/,aliases_config.s @@ -88,6 +88,9 @@ #if CONFIG_CPU_CSG_65CE02 .eval selected++ #endif +#if CONFIG_CPU_M65_45GS02 + .eval selected++ +#endif #if CONFIG_CPU_WDC_65816 .eval selected++ #endif diff --git a/c64/aliases/,aliases_cpu.s b/c64/aliases/,aliases_cpu.s index 023e7558..3e44405c 100644 --- a/c64/aliases/,aliases_cpu.s +++ b/c64/aliases/,aliases_cpu.s @@ -8,7 +8,7 @@ #define HAS_OPCODES_65C02 #endif -#if CONFIG_CPU_CSG_65CE02 +#if CONFIG_CPU_CSG_65CE02 || CONFIG_CPU_M65_45GS02 #define HAS_OPCODES_65CE02 #endif @@ -17,7 +17,7 @@ #endif -#if CONFIG_CPU_WDC_65C02 || CONFIG_CPU_CSG_65CE02 || CONFIG_CPU_WDC_65816 +#if CONFIG_CPU_WDC_65C02 || CONFIG_CPU_CSG_65CE02 || CONFIG_CPU_M65_45GS02 || CONFIG_CPU_WDC_65816 #define HAS_BCD_SAFE_INTERRUPTS #endif From 3b9bfde993b1a87899ebef3a69343ee412b7c5bf Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Tue, 31 Dec 2019 18:14:03 +0100 Subject: [PATCH 05/77] disabled screen editor - preparation for rework --- c64/kernal/interrupts/ea31.default_irq_handler.s | 4 ++-- c64/kernal/screen/chrout_screen.s | 4 ++-- .../screen/chrout_screen_advance_to_next_line.s | 4 ++++ c64/kernal/screen/chrout_screen_clr.s | 4 +++- c64/kernal/screen/chrout_screen_crsr.s | 12 ++++++++++++ c64/kernal/screen/chrout_screen_del.s | 6 ++++++ c64/kernal/screen/chrout_screen_home.s | 5 +++++ c64/kernal/screen/chrout_screen_ins.s | 5 +++++ c64/kernal/screen/chrout_screen_return.s | 4 +++- c64/kernal/screen/chrout_screen_shift_onoff.s | 1 + c64/kernal/screen/chrout_screen_tab.s | 7 ++++++- c64/kernal/screen/clear_screen_real.s | 8 ++++++++ c64/kernal/screen/cursor.s | 7 +++++++ c64/kernal/screen/cursor_enable.s | 1 + c64/kernal/screen/cursor_home.s | 2 ++ c64/kernal/screen/cursor_show.s | 5 +++++ c64/kernal/screen/e50a.plot.s | 8 +++++++- c64/kernal/screen/e544.clear_screen.jmp.s | 2 ++ c64/kernal/screen/screen_calculate_line_pointer.s | 3 +++ .../screen/screen_get_current_line_logical_length.s | 8 +++++++- c64/kernal/screen/screen_grow_logical_line.s | 3 +++ c64/kernal/screen/screen_normalize_xy.s | 4 ++++ c64/kernal/screen/screen_scroll_up_if_on_last_line.s | 3 +++ 23 files changed, 101 insertions(+), 9 deletions(-) diff --git a/c64/kernal/interrupts/ea31.default_irq_handler.s b/c64/kernal/interrupts/ea31.default_irq_handler.s index be964c9f..67912afd 100644 --- a/c64/kernal/interrupts/ea31.default_irq_handler.s +++ b/c64/kernal/interrupts/ea31.default_irq_handler.s @@ -11,8 +11,8 @@ default_irq_handler: #endif // CONFIG_RS232_UP9600 - - jsr cursor_blink +/* YYY disabled for rework + jsr cursor_blink */ jsr JSCNKEY jsr JUDTIM // update jiffy clock diff --git a/c64/kernal/screen/chrout_screen.s b/c64/kernal/screen/chrout_screen.s index 0b447fad..6a42cd38 100644 --- a/c64/kernal/screen/chrout_screen.s +++ b/c64/kernal/screen/chrout_screen.s @@ -55,7 +55,7 @@ chrout_screen: clc adc #$20 -output_literal_char: +output_literal_char: /* YYY disabled for rework // Write normal character on the screen @@ -108,7 +108,7 @@ chrout_screen_calc_lptr_done: jsr screen_calculate_line_pointer // FALLTROUGH - +*/ chrout_screen_done: jsr cursor_show_if_enabled diff --git a/c64/kernal/screen/chrout_screen_advance_to_next_line.s b/c64/kernal/screen/chrout_screen_advance_to_next_line.s index 323c47e8..ee417668 100644 --- a/c64/kernal/screen/chrout_screen_advance_to_next_line.s +++ b/c64/kernal/screen/chrout_screen_advance_to_next_line.s @@ -1,4 +1,6 @@ +/* YYY disabled for rework + chrout_screen_advance_to_next_line: // Go to start of line @@ -42,3 +44,5 @@ chrout_screen_advance_to_next_line: !: jmp chrout_screen_calc_lptr_done + +*/ diff --git a/c64/kernal/screen/chrout_screen_clr.s b/c64/kernal/screen/chrout_screen_clr.s index ab9469dd..1fb48047 100644 --- a/c64/kernal/screen/chrout_screen_clr.s +++ b/c64/kernal/screen/chrout_screen_clr.s @@ -3,7 +3,9 @@ // CLR key handling within CHROUT // -chrout_screen_CLR: +chrout_screen_CLR: /* YYY disabled for rework jsr clear_screen jmp chrout_screen_done + +*/ diff --git a/c64/kernal/screen/chrout_screen_crsr.s b/c64/kernal/screen/chrout_screen_crsr.s index ed174568..78bd2a71 100644 --- a/c64/kernal/screen/chrout_screen_crsr.s +++ b/c64/kernal/screen/chrout_screen_crsr.s @@ -4,6 +4,16 @@ // +chrout_screen_CRSR_UP: + rts +chrout_screen_CRSR_DOWN: + rts +chrout_screen_CRSR_LEFT: + rts +chrout_screen_CRSR_RIGHT: + rts + +/* YYY disabled for rework chrout_screen_CRSR_UP: lda PNTR @@ -41,3 +51,5 @@ chrout_screen_CRSR_RIGHT: inc PNTR jmp chrout_screen_calc_lptr_done + +*/ diff --git a/c64/kernal/screen/chrout_screen_del.s b/c64/kernal/screen/chrout_screen_del.s index 88a403b2..c7bb1274 100644 --- a/c64/kernal/screen/chrout_screen_del.s +++ b/c64/kernal/screen/chrout_screen_del.s @@ -3,6 +3,10 @@ // CHROUT routine - screen support, DEL key handling // +chrout_screen_DEL: + rts + +/* YYY disabled for rework chrout_screen_DEL: // In insert mode it embeds control character @@ -63,3 +67,5 @@ chrout_screen_del_column_non_0: chrout_screen_del_done: jmp chrout_screen_done + +*/ \ No newline at end of file diff --git a/c64/kernal/screen/chrout_screen_home.s b/c64/kernal/screen/chrout_screen_home.s index 77976bd0..ef800ca9 100644 --- a/c64/kernal/screen/chrout_screen_home.s +++ b/c64/kernal/screen/chrout_screen_home.s @@ -4,7 +4,12 @@ // +chrout_screen_HOME: + rts + +/* YYY disabled for rework chrout_screen_HOME: jsr cursor_home jmp chrout_screen_done +*/ \ No newline at end of file diff --git a/c64/kernal/screen/chrout_screen_ins.s b/c64/kernal/screen/chrout_screen_ins.s index 3082012a..81493f88 100644 --- a/c64/kernal/screen/chrout_screen_ins.s +++ b/c64/kernal/screen/chrout_screen_ins.s @@ -3,6 +3,10 @@ // CHROUT routine - screen support, INS key handling // +chrout_screen_INS: + rts + +/* YYY disabled for rework chrout_screen_INS: // Insert (shift-DELETE) @@ -62,3 +66,4 @@ chrout_screen_INS: sta (PNT),y jmp chrout_screen_done +*/ \ No newline at end of file diff --git a/c64/kernal/screen/chrout_screen_return.s b/c64/kernal/screen/chrout_screen_return.s index 521c5323..d8313f24 100644 --- a/c64/kernal/screen/chrout_screen_return.s +++ b/c64/kernal/screen/chrout_screen_return.s @@ -4,7 +4,7 @@ // -chrout_screen_RETURN: +chrout_screen_RETURN: /* YYY disabled for rework // RETURN clears quote and insert modes, it also clears reverse flag lda #$00 @@ -12,3 +12,5 @@ chrout_screen_RETURN: sta INSRT sta RVS jmp chrout_screen_advance_to_next_line + +*/ diff --git a/c64/kernal/screen/chrout_screen_shift_onoff.s b/c64/kernal/screen/chrout_screen_shift_onoff.s index 8f16587d..4f56ebac 100644 --- a/c64/kernal/screen/chrout_screen_shift_onoff.s +++ b/c64/kernal/screen/chrout_screen_shift_onoff.s @@ -3,6 +3,7 @@ // SHIFT ON/OFF handling within CHROUT // + chrout_screen_SHIFT_ON: lda #$00 // enable SHIFT+VENDOR combination diff --git a/c64/kernal/screen/chrout_screen_tab.s b/c64/kernal/screen/chrout_screen_tab.s index ac48295c..bd94c16f 100644 --- a/c64/kernal/screen/chrout_screen_tab.s +++ b/c64/kernal/screen/chrout_screen_tab.s @@ -6,7 +6,12 @@ #if CONFIG_EDIT_TABULATORS +chrout_screen_TAB_FW: + rts +chrout_screen_TAB_BW: + rts +/* YYY disabled for rework chrout_screen_TAB_FW: lda PNTR @@ -27,7 +32,7 @@ chrout_screen_TAB_BW: and #%11111000 sta PNTR !: - jmp chrout_screen_calc_lptr_done + jmp chrout_screen_calc_lptr_done */ #endif // CONFIG_EDIT_TABULATORS diff --git a/c64/kernal/screen/clear_screen_real.s b/c64/kernal/screen/clear_screen_real.s index df0b835a..83126486 100644 --- a/c64/kernal/screen/clear_screen_real.s +++ b/c64/kernal/screen/clear_screen_real.s @@ -1,6 +1,12 @@ // Clear screen and initialise line link table // (Compute's Mapping the 64 p215-216) + +clear_screen_real: + rts + +/* YYY disabled for rework + clear_screen_real: // XXX it is probably a good idea to hide cursor first @@ -60,3 +66,5 @@ clearscreen_l3: // (Compute's Mapping the 64 p216) jmp cursor_home + +*/ diff --git a/c64/kernal/screen/cursor.s b/c64/kernal/screen/cursor.s index 0221cf18..fdf585c6 100644 --- a/c64/kernal/screen/cursor.s +++ b/c64/kernal/screen/cursor.s @@ -11,7 +11,13 @@ // - PNTR (current screen x position) // +cursor_disable: + rts +cursor_hide_if_visible: + rts + +/* YYY disabled for rework cursor_blink: // Is the cursor enabled? lda BLNSW @@ -79,3 +85,4 @@ cursor_blink_timer_reset: cursor_blink_end: rts +*/ \ No newline at end of file diff --git a/c64/kernal/screen/cursor_enable.s b/c64/kernal/screen/cursor_enable.s index 72646312..09b53906 100644 --- a/c64/kernal/screen/cursor_enable.s +++ b/c64/kernal/screen/cursor_enable.s @@ -4,6 +4,7 @@ // - BLNSW (cursor blink switch) // + cursor_enable: lda #$00 sta BLNSW diff --git a/c64/kernal/screen/cursor_home.s b/c64/kernal/screen/cursor_home.s index bb9d9bd2..bd9461e4 100644 --- a/c64/kernal/screen/cursor_home.s +++ b/c64/kernal/screen/cursor_home.s @@ -3,6 +3,7 @@ // Home the cursor (Compute's Mapping the 64 p216) // +/* YYY disabled for rework cursor_home: lda #$00 @@ -10,3 +11,4 @@ cursor_home: sta TBLX // y position jmp screen_calculate_line_pointer +*/ \ No newline at end of file diff --git a/c64/kernal/screen/cursor_show.s b/c64/kernal/screen/cursor_show.s index c21b092c..3c29c870 100644 --- a/c64/kernal/screen/cursor_show.s +++ b/c64/kernal/screen/cursor_show.s @@ -6,6 +6,10 @@ // - BLNCT (cursor blink countdown) // +cursor_show_if_enabled: + rts + +/* YYY disabled for rework cursor_show_if_enabled: lda BLNSW bne cursor_show_end @@ -32,3 +36,4 @@ cursor_show: cursor_show_end: rts +*/ diff --git a/c64/kernal/screen/e50a.plot.s b/c64/kernal/screen/e50a.plot.s index a36dfc08..627eced5 100644 --- a/c64/kernal/screen/e50a.plot.s +++ b/c64/kernal/screen/e50a.plot.s @@ -8,7 +8,12 @@ // CPU registers that has to be preserved (see [RG64]): none // -PLOT: + +plot_set: + rts + + +PLOT: /* YYY disabled for rework bcs plot_get // Note: the 'set' part has to start from $E50C, as this is a known address @@ -30,3 +35,4 @@ plot_get: ldy PNTR ldx TBLX rts +*/ \ No newline at end of file diff --git a/c64/kernal/screen/e544.clear_screen.jmp.s b/c64/kernal/screen/e544.clear_screen.jmp.s index 50d16f38..6adfba39 100644 --- a/c64/kernal/screen/e544.clear_screen.jmp.s +++ b/c64/kernal/screen/e544.clear_screen.jmp.s @@ -1,6 +1,8 @@ + // Clear screen and initialise line link table // (Compute's Mapping the 64 p215-216) + clear_screen: jmp clear_screen_real diff --git a/c64/kernal/screen/screen_calculate_line_pointer.s b/c64/kernal/screen/screen_calculate_line_pointer.s index d982a38d..9383646d 100644 --- a/c64/kernal/screen/screen_calculate_line_pointer.s +++ b/c64/kernal/screen/screen_calculate_line_pointer.s @@ -1,4 +1,6 @@ +/* YYY disabled for rework + screen_calculate_line_pointer: jsr screen_normalize_xy @@ -52,3 +54,4 @@ update_colour_line_pointer: sta USER+1 rts +*/ \ No newline at end of file diff --git a/c64/kernal/screen/screen_get_current_line_logical_length.s b/c64/kernal/screen/screen_get_current_line_logical_length.s index 9d8aafc1..e81640fe 100644 --- a/c64/kernal/screen/screen_get_current_line_logical_length.s +++ b/c64/kernal/screen/screen_get_current_line_logical_length.s @@ -1,4 +1,9 @@ +screen_get_current_line_logical_length: + rts + +/* YYY disabled for rework + screen_get_current_line_logical_length: ldy TBLX lda LDTBL,y @@ -8,4 +13,5 @@ screen_get_current_line_logical_length: !: lda #39 sta LNMX - rts \ No newline at end of file + rts +*/ \ No newline at end of file diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index a4ac0b48..59a49a09 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -1,5 +1,7 @@ +/* YYY disabled for rework + screen_grow_logical_line_done: rts @@ -155,3 +157,4 @@ no_copy_down: bne !- rts +*/ diff --git a/c64/kernal/screen/screen_normalize_xy.s b/c64/kernal/screen/screen_normalize_xy.s index b4dc6ecd..90486ed3 100644 --- a/c64/kernal/screen/screen_normalize_xy.s +++ b/c64/kernal/screen/screen_normalize_xy.s @@ -4,6 +4,8 @@ // If X < 0, then make X = X + 40 (or 80, if previous line is linked) // +/* YYY disabled for rework + screen_normalize_xy: lda PNTR @@ -73,3 +75,5 @@ link_count_loop: sta TBLX y_ok: rts + +*/ \ No newline at end of file diff --git a/c64/kernal/screen/screen_scroll_up_if_on_last_line.s b/c64/kernal/screen/screen_scroll_up_if_on_last_line.s index 1ad713cc..30008068 100644 --- a/c64/kernal/screen/screen_scroll_up_if_on_last_line.s +++ b/c64/kernal/screen/screen_scroll_up_if_on_last_line.s @@ -1,4 +1,6 @@ +/* YYY disabled for rework + not_last_line: rts @@ -126,3 +128,4 @@ link_copy: // Restore correct line pointers jmp screen_calculate_line_pointer +*/ \ No newline at end of file From 9ef81db3d4e99ebf08d0b6bc07b00c9693b64024 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 1 Jan 2020 20:20:49 +0100 Subject: [PATCH 06/77] screen clearing fixes --- c64/kernal/screen/clear_screen_real.s | 101 +++++++++++++------------- c64/kernal/screen/cursor_home.s | 26 +++++++ 2 files changed, 76 insertions(+), 51 deletions(-) diff --git a/c64/kernal/screen/clear_screen_real.s b/c64/kernal/screen/clear_screen_real.s index 83126486..6654f922 100644 --- a/c64/kernal/screen/clear_screen_real.s +++ b/c64/kernal/screen/clear_screen_real.s @@ -1,70 +1,69 @@ -// Clear screen and initialise line link table -// (Compute's Mapping the 64 p215-216) + +// +// Clear screen and initialise line link table, described in: +// +// - [CM64] Computes Mapping the Commodore 64 - pages 215-216 +// clear_screen_real: - rts -/* YYY disabled for rework + // First disable the cursor + jsr cursor_disable -clear_screen_real: + // Clear the line link table - cheecked on original ROMs, + // the highest bit set means that the line is NOT a logical + // continuation of the previous one - // XXX it is probably a good idea to hide cursor first - - // Clear line link table - // (Compute's Mapping the 64 p215) - - lda #$00 - ldy #24 -clearscreen_l1: + lda #$80 + ldy #24 +!: sta LDTBL,y dey - bpl clearscreen_l1 + bpl !- - // Y now = #$FF + // YYY flow can probably be size-optimized, by clearing a single row each time (we will need such a subroutine) - // Clear screen RAM. - // We should do this at HIBASE, which annoyingly - // is no ZP, so we need to make a vector - // (Compute's Mapping the 64 p216) - // Get pointer to the screen into PNT - // as it is the first appropriate place for it found when - // searching through the ZP allocations listed in - // Compute's Mapping the 64 - sta PNT+0 + // Clear screen character RAM. Unfortunately, the HIBASE value is not on the zero page, + // we will reuse PNT (it will be overridden in a moment nevertheless) as the pointer + + iny // sets .Y to 0 + sty PNT+0 lda HIBASE - sta PNT+1 - ldx #$03 // countdown for pages to update - iny // Y now = #$00 - lda #$20 // space character -clearscreen_l2: + sta PNT+1 + + ldx #$03 // countdown for pages to update + +clear_screen_loop: + + ldy #$00 + lda #$01 // space character screen code +!: sta (PNT),y iny - bne clearscreen_l2 - // To draw only 1000 bytes, add 250 to address each time - lda PNT + cpy #250 // clear 250 bytes only, do not cross 1000 bytes barrier + bne !- + + lda PNT+0 clc - adc #<250 - sta PNT - lda PNT+1 - adc #>250 - sta PNT+1 - lda #$20 // get space character again + adc #250 + sta PNT+0 + bcc !+ + inc PNT+1 +!: dex - bpl clearscreen_l2 + bpl clear_screen_loop + + // Now clear the colour RAM - .Y is now 250, make use of this fact - // Clear colour RAM - // (Compute's Mapping the 64 p216) lda COLOR -clearscreen_l3: - sta $d800,y - sta $d900,y - sta $da00,y - sta $db00-24,y // so we only erase 1000 bytes - iny - bne clearscreen_l3 +!: + sta $D800 - 1 + 250 * 0, y + sta $D800 - 1 + 250 * 1, y + sta $D800 - 1 + 250 * 2, y + sta $D800 - 1 + 250 * 3, y + dey + bne !- - // (Compute's Mapping the 64 p216) + // Fall to cursor home routine jmp cursor_home - -*/ diff --git a/c64/kernal/screen/cursor_home.s b/c64/kernal/screen/cursor_home.s index bd9461e4..c73d1237 100644 --- a/c64/kernal/screen/cursor_home.s +++ b/c64/kernal/screen/cursor_home.s @@ -3,6 +3,32 @@ // Home the cursor (Compute's Mapping the 64 p216) // +// Variables: (http://sta.c64.org/cbm64mem.html) +// - $C7 - RVS - reverse mode switch +// - $C8 - INDX - length of line minus 1 during screen input. Values: $27, 39; $4F, 79. +// - $C9 - LXSP+0 - cursor row during screen input. Values: $00-$18, 0-24. +// - $CA - LXSP+1 - cursor column during screen input. Values: $00-$27, 0-39. +// - $CC - BLNSW - cursor visibility switch. Values: $01-$FF: Cursor is off. +// - $CD - BLNCT - delay counter for changing cursor phase. Values: +// - $CE - GDBLN - screen code of character under cursor +// - $CF - BLNON - cursor phase switch +// - $D0 - CRSW - end of line switch during screen input +// - $D1-$D2 - PNT - pointer to current line in screen memory. +// - $D3 - PNTR - current cursor column. Values: $00-$27, 0-39. +// - $D4 - QTSW - quotation mode switch +// - $D5 - LNMX - length of current screen line minus 1. Values: $27, 39; $4F, 79. +// - $D6 - TBLX - current cursor row. Values: $00-$18, 0-24. +// - $D8 - INSRT - number of insertions +// - $D9-$F1 - LDTBL - link table +// - $F2 - temporary value for screen scroll +// - $F3-$F4 - USER - pointer to current line in Color RAM. +// - $02A5 - TLNIDX - number of line currently being scrolled during scrolling the screen + + +cursor_home: + jmp cursor_home + + /* YYY disabled for rework cursor_home: From 0df88248a37c5f29b4c9dbc46024de66e667bfe1 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 1 Jan 2020 20:26:07 +0100 Subject: [PATCH 07/77] fixed some mistakes in screen clearing --- c64/kernal/screen/clear_screen_real.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/c64/kernal/screen/clear_screen_real.s b/c64/kernal/screen/clear_screen_real.s index 6654f922..fc115b26 100644 --- a/c64/kernal/screen/clear_screen_real.s +++ b/c64/kernal/screen/clear_screen_real.s @@ -8,8 +8,8 @@ clear_screen_real: - // First disable the cursor - jsr cursor_disable + // YYY - do we need this? First disable the cursor + // jsr cursor_disable // Clear the line link table - cheecked on original ROMs, // the highest bit set means that the line is NOT a logical @@ -37,7 +37,7 @@ clear_screen_real: clear_screen_loop: ldy #$00 - lda #$01 // space character screen code + lda #$20 // space character screen code !: sta (PNT),y iny From ca3b678578e6febd4168de40c4088a3787991fee Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 1 Jan 2020 20:47:18 +0100 Subject: [PATCH 08/77] tested cursor homing, started work on PNT recalculation --- STATUS.md | 3 +- c64/kernal/,stubs/e566.home_cursor.s | 4 -- c64/kernal/screen/e544.clear_screen.jmp.s | 7 +- c64/kernal/screen/e566.cursor_home.s | 15 ++++ c64/kernal/{,stubs => screen}/e566.interop | 0 c64/kernal/screen/e56c.interop | 4 ++ ...sor_home.s => e56c.screen_calculate_pnt.s} | 72 ++++++++++++++++--- .../screen/screen_calculate_line_pointer.s | 57 --------------- 8 files changed, 88 insertions(+), 74 deletions(-) delete mode 100644 c64/kernal/,stubs/e566.home_cursor.s create mode 100644 c64/kernal/screen/e566.cursor_home.s rename c64/kernal/{,stubs => screen}/e566.interop (100%) create mode 100644 c64/kernal/screen/e56c.interop rename c64/kernal/screen/{cursor_home.s => e56c.screen_calculate_pnt.s} (58%) delete mode 100644 c64/kernal/screen/screen_calculate_line_pointer.s diff --git a/STATUS.md b/STATUS.md index 1697e3ef..87559036 100644 --- a/STATUS.md +++ b/STATUS.md @@ -236,7 +236,8 @@ Not all of them - only these we want to have implemented. | `$E51B` | init screen keyboard, no VIC | DONE | | | `$E544` | clear screen | DONE | | | `$E50C` | set cursor position | PARTIAL | | -| `$E566` | home cursor | NOT DONE | | +| `$E566` | home cursor | DONE | | +| `$E56C` | set PNTR value | | | | `$E5A0` | setup VIC II & I/O | DONE | | | `$E6B6` | advance cursor | NOT DONE | | | `$E701` | previous line | NOT DONE | | diff --git a/c64/kernal/,stubs/e566.home_cursor.s b/c64/kernal/,stubs/e566.home_cursor.s deleted file mode 100644 index 4e5b7d5f..00000000 --- a/c64/kernal/,stubs/e566.home_cursor.s +++ /dev/null @@ -1,4 +0,0 @@ - -// XXX provide documentation and implementation - - STUB_IMPLEMENTATION() diff --git a/c64/kernal/screen/e544.clear_screen.jmp.s b/c64/kernal/screen/e544.clear_screen.jmp.s index 6adfba39..1e9b4a2e 100644 --- a/c64/kernal/screen/e544.clear_screen.jmp.s +++ b/c64/kernal/screen/e544.clear_screen.jmp.s @@ -1,6 +1,9 @@ -// Clear screen and initialise line link table -// (Compute's Mapping the 64 p215-216) +// +// Clear screen and initialise line link table, described in: +// +// - [CM64] Computes Mapping the Commodore 64 - pages 215-216 +// clear_screen: diff --git a/c64/kernal/screen/e566.cursor_home.s b/c64/kernal/screen/e566.cursor_home.s new file mode 100644 index 00000000..98566eb8 --- /dev/null +++ b/c64/kernal/screen/e566.cursor_home.s @@ -0,0 +1,15 @@ + +// +// Home the cursor, described in: +// +// - [CM64] Computes Mapping the Commodore 64 - page 216 +// + + +cursor_home: + + lda #$00 + sta PNTR // current column + sta TBLX // current row + + // FALLTROUGH to the next routine diff --git a/c64/kernal/,stubs/e566.interop b/c64/kernal/screen/e566.interop similarity index 100% rename from c64/kernal/,stubs/e566.interop rename to c64/kernal/screen/e566.interop diff --git a/c64/kernal/screen/e56c.interop b/c64/kernal/screen/e56c.interop new file mode 100644 index 00000000..6281847b --- /dev/null +++ b/c64/kernal/screen/e56c.interop @@ -0,0 +1,4 @@ + +This is a well-known address, probably used by lots of software. See for example here: + +- https://www.lemon64.com/forum/viewtopic.php?t=69526&sid=836d087e9759db667ba3bb1732eea266 diff --git a/c64/kernal/screen/cursor_home.s b/c64/kernal/screen/e56c.screen_calculate_pnt.s similarity index 58% rename from c64/kernal/screen/cursor_home.s rename to c64/kernal/screen/e56c.screen_calculate_pnt.s index c73d1237..eec4c250 100644 --- a/c64/kernal/screen/cursor_home.s +++ b/c64/kernal/screen/e56c.screen_calculate_pnt.s @@ -1,7 +1,16 @@ // -// Home the cursor (Compute's Mapping the 64 p216) +// Set pointer (PNT) to current screen line , described in: // +// - [CM64] Computes Mapping the Commodore 64 - page 216 +// + + +screen_calculate_PNT: + + // YYY implement this! + rts + // Variables: (http://sta.c64.org/cbm64mem.html) // - $C7 - RVS - reverse mode switch @@ -25,16 +34,59 @@ // - $02A5 - TLNIDX - number of line currently being scrolled during scrolling the screen -cursor_home: - jmp cursor_home - - /* YYY disabled for rework -cursor_home: - lda #$00 - sta PNTR // x position - sta TBLX // y position +screen_calculate_line_pointer: + jsr screen_normalize_xy + + // Reset pointer to start of screen + lda HIBASE + sta PNT+1 + lda #0 + sta PNT+0 - jmp screen_calculate_line_pointer + // Add 40 for every line, or 80 if the lines are linked + ldx TBLX + +!: + // Stop if we have counted enough lines + beq !+ + + // Add 40 or 80 based on whether the line is linked + // or not. + ldy #40 + // -1 offset is because we count down from N to 1, not + // N-1 to 0. + lda LDTBL-1,x + bpl sclp_l1 + ldy #80 +sclp_l1: + // Add computed line length to pointer value + tya + clc + adc PNT+0 + sta PNT+0 + lda PNT+1 + adc #0 + sta PNT+1 + + // Loop back to next line + dex + jmp !- +!: + + // FALLTHROUGH + +update_colour_line_pointer: + // Now setup pointer to colour RAM + lda PNT+0 + sta USER+0 + lda PNT+1 + sec + sbc HIBASE + clc + adc #>$d800 + sta USER+1 + + rts */ \ No newline at end of file diff --git a/c64/kernal/screen/screen_calculate_line_pointer.s b/c64/kernal/screen/screen_calculate_line_pointer.s deleted file mode 100644 index 9383646d..00000000 --- a/c64/kernal/screen/screen_calculate_line_pointer.s +++ /dev/null @@ -1,57 +0,0 @@ - -/* YYY disabled for rework - -screen_calculate_line_pointer: - jsr screen_normalize_xy - - // Reset pointer to start of screen - lda HIBASE - sta PNT+1 - lda #0 - sta PNT+0 - - // Add 40 for every line, or 80 if the lines are linked - ldx TBLX - -!: - // Stop if we have counted enough lines - beq !+ - - // Add 40 or 80 based on whether the line is linked - // or not. - ldy #40 - // -1 offset is because we count down from N to 1, not - // N-1 to 0. - lda LDTBL-1,x - bpl sclp_l1 - ldy #80 -sclp_l1: - // Add computed line length to pointer value - tya - clc - adc PNT+0 - sta PNT+0 - lda PNT+1 - adc #0 - sta PNT+1 - - // Loop back to next line - dex - jmp !- -!: - - // FALLTHROUGH - -update_colour_line_pointer: - // Now setup pointer to colour RAM - lda PNT+0 - sta USER+0 - lda PNT+1 - sec - sbc HIBASE - clc - adc #>$d800 - sta USER+1 - - rts -*/ \ No newline at end of file From 603d02546b04e8c105265854159fadfa426ec688 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Thu, 2 Jan 2020 17:54:04 +0100 Subject: [PATCH 09/77] reworked PNT/USER recalculation --- STATUS.md | 2 +- c64/aliases/,aliases_ram_lowmem.s | 4 +- c64/kernal/screen/clear_screen_real.s | 3 - c64/kernal/screen/e566.cursor_home.s | 2 +- c64/kernal/screen/e56c.screen_calculate_pnt.s | 92 ------------------- .../screen/e56c.screen_calculate_pnt_user.s | 51 ++++++++++ 6 files changed, 55 insertions(+), 99 deletions(-) delete mode 100644 c64/kernal/screen/e56c.screen_calculate_pnt.s create mode 100644 c64/kernal/screen/e56c.screen_calculate_pnt_user.s diff --git a/STATUS.md b/STATUS.md index 87559036..3ba2e3d0 100644 --- a/STATUS.md +++ b/STATUS.md @@ -237,7 +237,7 @@ Not all of them - only these we want to have implemented. | `$E544` | clear screen | DONE | | | `$E50C` | set cursor position | PARTIAL | | | `$E566` | home cursor | DONE | | -| `$E56C` | set PNTR value | | | +| `$E56C` | set PNT and USER values | DONE | | | `$E5A0` | setup VIC II & I/O | DONE | | | `$E6B6` | advance cursor | NOT DONE | | | `$E701` | previous line | NOT DONE | | diff --git a/c64/aliases/,aliases_ram_lowmem.s b/c64/aliases/,aliases_ram_lowmem.s index cf1f4ee8..5d5af9ba 100644 --- a/c64/aliases/,aliases_ram_lowmem.s +++ b/c64/aliases/,aliases_ram_lowmem.s @@ -153,10 +153,10 @@ .label BLNON = $CF // cursor visibility flag .label CRSW = $D0 // whether to input from screen or keyboard .label PNT = $D1 // $D1-$D2 pointer to the current screen line - .label PNTR = $D3 // current screen X position + .label PNTR = $D3 // current screen X position (logical column), 0-79 .label QTSW = $D4 // quote mode flag .label LNMX = $D5 // logical line length, [!] our usage probably differs in details - .label TBLX = $D6 // current screen Y position + .label TBLX = $D6 // current screen Y position (row), 0-24 .label SCHAR = $D7 // ASCII value of the last printed character .label INSRT = $D8 // insert mode flag/counter .label LDTBL = $D9 // $D9-$F2 screen line link table, [!] our usage is different XXX give more details diff --git a/c64/kernal/screen/clear_screen_real.s b/c64/kernal/screen/clear_screen_real.s index fc115b26..5766dbf6 100644 --- a/c64/kernal/screen/clear_screen_real.s +++ b/c64/kernal/screen/clear_screen_real.s @@ -8,9 +8,6 @@ clear_screen_real: - // YYY - do we need this? First disable the cursor - // jsr cursor_disable - // Clear the line link table - cheecked on original ROMs, // the highest bit set means that the line is NOT a logical // continuation of the previous one diff --git a/c64/kernal/screen/e566.cursor_home.s b/c64/kernal/screen/e566.cursor_home.s index 98566eb8..e5c22d17 100644 --- a/c64/kernal/screen/e566.cursor_home.s +++ b/c64/kernal/screen/e566.cursor_home.s @@ -9,7 +9,7 @@ cursor_home: lda #$00 - sta PNTR // current column + sta PNTR // current column (logical) sta TBLX // current row // FALLTROUGH to the next routine diff --git a/c64/kernal/screen/e56c.screen_calculate_pnt.s b/c64/kernal/screen/e56c.screen_calculate_pnt.s deleted file mode 100644 index eec4c250..00000000 --- a/c64/kernal/screen/e56c.screen_calculate_pnt.s +++ /dev/null @@ -1,92 +0,0 @@ - -// -// Set pointer (PNT) to current screen line , described in: -// -// - [CM64] Computes Mapping the Commodore 64 - page 216 -// - - -screen_calculate_PNT: - - // YYY implement this! - rts - - -// Variables: (http://sta.c64.org/cbm64mem.html) -// - $C7 - RVS - reverse mode switch -// - $C8 - INDX - length of line minus 1 during screen input. Values: $27, 39; $4F, 79. -// - $C9 - LXSP+0 - cursor row during screen input. Values: $00-$18, 0-24. -// - $CA - LXSP+1 - cursor column during screen input. Values: $00-$27, 0-39. -// - $CC - BLNSW - cursor visibility switch. Values: $01-$FF: Cursor is off. -// - $CD - BLNCT - delay counter for changing cursor phase. Values: -// - $CE - GDBLN - screen code of character under cursor -// - $CF - BLNON - cursor phase switch -// - $D0 - CRSW - end of line switch during screen input -// - $D1-$D2 - PNT - pointer to current line in screen memory. -// - $D3 - PNTR - current cursor column. Values: $00-$27, 0-39. -// - $D4 - QTSW - quotation mode switch -// - $D5 - LNMX - length of current screen line minus 1. Values: $27, 39; $4F, 79. -// - $D6 - TBLX - current cursor row. Values: $00-$18, 0-24. -// - $D8 - INSRT - number of insertions -// - $D9-$F1 - LDTBL - link table -// - $F2 - temporary value for screen scroll -// - $F3-$F4 - USER - pointer to current line in Color RAM. -// - $02A5 - TLNIDX - number of line currently being scrolled during scrolling the screen - - -/* YYY disabled for rework - -screen_calculate_line_pointer: - jsr screen_normalize_xy - - // Reset pointer to start of screen - lda HIBASE - sta PNT+1 - lda #0 - sta PNT+0 - - // Add 40 for every line, or 80 if the lines are linked - ldx TBLX - -!: - // Stop if we have counted enough lines - beq !+ - - // Add 40 or 80 based on whether the line is linked - // or not. - ldy #40 - // -1 offset is because we count down from N to 1, not - // N-1 to 0. - lda LDTBL-1,x - bpl sclp_l1 - ldy #80 -sclp_l1: - // Add computed line length to pointer value - tya - clc - adc PNT+0 - sta PNT+0 - lda PNT+1 - adc #0 - sta PNT+1 - - // Loop back to next line - dex - jmp !- -!: - - // FALLTHROUGH - -update_colour_line_pointer: - // Now setup pointer to colour RAM - lda PNT+0 - sta USER+0 - lda PNT+1 - sec - sbc HIBASE - clc - adc #>$d800 - sta USER+1 - - rts -*/ \ No newline at end of file diff --git a/c64/kernal/screen/e56c.screen_calculate_pnt_user.s b/c64/kernal/screen/e56c.screen_calculate_pnt_user.s new file mode 100644 index 00000000..d1d247ce --- /dev/null +++ b/c64/kernal/screen/e56c.screen_calculate_pnt_user.s @@ -0,0 +1,51 @@ + +// +// Set pointer (PNT) to current screen line , described in: +// +// - [CM64] Computes Mapping the Commodore 64 - page 216 +// - http://sta.c64.org/cbm64scrfunc.html +// + + +screen_calculate_PNT_USER: + + // YYY jsr screen_normalize_xy - do we need this? probably not + + // Reset pointer to start of screen + + lda HIBASE + sta PNT+1 + lda #$00 + sta PNT+0 + + // Add 40 to PNT for every line + + ldx TBLX + beq screen_calculate_USER +!: + lda #40 + clc + adc PNT+0 + sta PNT+0 + bcc !+ + inc PNT+1 +!: + dex + bne !-- + + // FALLTROUGH + +screen_calculate_USER: + + // Calculate USER (pointer to the current line in color RAM) + + lda PNT+0 + sta USER+0 + lda PNT+1 + sec + sbc HIBASE + clc + adc #>$d800 + sta USER+1 + + rts From d82907bdc3a1706ceeb73af942022b35f04d68c8 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Thu, 2 Jan 2020 18:41:26 +0100 Subject: [PATCH 10/77] work on screen char output --- c64/kernal/screen/chrout_screen.s | 53 +++++++++++++++++-------- c64/kernal/screen/chrout_screen_quote.s | 2 +- 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/c64/kernal/screen/chrout_screen.s b/c64/kernal/screen/chrout_screen.s index 6a42cd38..81c00842 100644 --- a/c64/kernal/screen/chrout_screen.s +++ b/c64/kernal/screen/chrout_screen.s @@ -29,12 +29,12 @@ chrout_screen: bcc !+ and #$7F - jmp output_literal_char // not high char + jmp chrout_screen_literal // not high char !: // Range $20-$3F is unchanged cmp #$40 - bcc output_literal_char // not high char + bcc chrout_screen_literal // not high char // Unshifted letters and symbols from $40-$5F // all end up being -$40 @@ -49,42 +49,63 @@ chrout_screen: // Fix shifted chars by adding $20 again cmp #$20 - bcc output_literal_char // not high char + bcc chrout_screen_literal // not high char cmp #$40 - bcs output_literal_char // not high char + bcs chrout_screen_literal // not high char clc adc #$20 -output_literal_char: /* YYY disabled for rework - + // FALLTROUGH + +chrout_screen_literal: + // Write normal character on the screen - pha - - ldy PNTR - ora RVS // Compute's Mapping the 64 p38 + tax // store screen code, we need .A for calculations + + // First we need offset from PNT in .Y, we can take it from PNTR (0-79) + + lda PNTR + cmp #40 + bcc !+ + sec + sbc #40 +!: + tay + + // Put the character on the screen + + txa + ora RVS // Computes Mapping the 64, page 38 sta (PNT),y // Decrement number of chars waiting to be inserted + lda INSRT beq !+ dec INSRT !: - pla + // Toggle quote flag if required + + txa cmp #$22 - bne not_quote + bne !+ - // Toggle quote flag if required lda QTSW eor #$80 sta QTSW +!: + // Set colour of the newly printed character -not_quote: - - // Set colour lda COLOR sta (USER),y + + jmp !- + + + /* YYY disabled for rework + // Advance the column, and scroll screen down if we need // to insert a 2nd line in this logical line. // (eg Compute's Mapping the 64 p41) diff --git a/c64/kernal/screen/chrout_screen_quote.s b/c64/kernal/screen/chrout_screen_quote.s index 266f6d36..7cdf875e 100644 --- a/c64/kernal/screen/chrout_screen_quote.s +++ b/c64/kernal/screen/chrout_screen_quote.s @@ -17,4 +17,4 @@ chrout_screen_quote: bcc !+ adc #$BF // C=1, so adding $BF + C = add $C0 !: - jmp output_literal_char + jmp chrout_screen_literal From ca22b228d7aba11da2e3a244526f4ed2724b8455 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Thu, 2 Jan 2020 18:54:06 +0100 Subject: [PATCH 11/77] finished literal char output rework --- c64/kernal/screen/chrout_screen.s | 26 +++++++++---------- ...t_line.s => screen_advance_to_next_line.s} | 7 +++-- c64/kernal/screen/screen_grow_logical_line.s | 8 ++++-- 3 files changed, 24 insertions(+), 17 deletions(-) rename c64/kernal/screen/{chrout_screen_advance_to_next_line.s => screen_advance_to_next_line.s} (94%) diff --git a/c64/kernal/screen/chrout_screen.s b/c64/kernal/screen/chrout_screen.s index 81c00842..673fb4c3 100644 --- a/c64/kernal/screen/chrout_screen.s +++ b/c64/kernal/screen/chrout_screen.s @@ -100,36 +100,36 @@ chrout_screen_literal: lda COLOR sta (USER),y + // Advance the column - jmp !- - - - /* YYY disabled for rework - - // Advance the column, and scroll screen down if we need - // to insert a 2nd line in this logical line. - // (eg Compute's Mapping the 64 p41) - ldx TBLX + ldy PNTR iny sty PNTR + + // Scroll down (extend logical line) if needed + cpy #40 bne !+ jsr screen_grow_logical_line ldy PNTR !: + // If not the 80th character of the logical row, we are done + cpy #80 bcc chrout_screen_done + + // Advance to the next line + lda #0 sta PNTR - jmp chrout_screen_advance_to_next_line - + jmp screen_advance_to_next_line chrout_screen_calc_lptr_done: - jsr screen_calculate_line_pointer + jsr screen_calculate_PNT_USER // FALLTROUGH -*/ + chrout_screen_done: jsr cursor_show_if_enabled diff --git a/c64/kernal/screen/chrout_screen_advance_to_next_line.s b/c64/kernal/screen/screen_advance_to_next_line.s similarity index 94% rename from c64/kernal/screen/chrout_screen_advance_to_next_line.s rename to c64/kernal/screen/screen_advance_to_next_line.s index ee417668..fce5a5a5 100644 --- a/c64/kernal/screen/chrout_screen_advance_to_next_line.s +++ b/c64/kernal/screen/screen_advance_to_next_line.s @@ -1,8 +1,11 @@ + +screen_advance_to_next_line: +.break + rts + /* YYY disabled for rework -chrout_screen_advance_to_next_line: - // Go to start of line lda #0 sta PNTR diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index 59a49a09..49546a66 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -1,12 +1,16 @@ -/* YYY disabled for rework screen_grow_logical_line_done: rts + screen_grow_logical_line: - +.break + rts + +/* YYY disabled for rework + // Do not grow line if it is already grown ldy TBLX lda LDTBL,y From 64c8bc6b825c8b70602b81ba740b3b89246daa63 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 3 Jan 2020 20:43:32 +0100 Subject: [PATCH 12/77] more screeen work, provided unofficial line clear routine --- STATUS.md | 2 +- c64/kernal/,stubs/e9ff.clear_line.s | 4 --- c64/kernal/screen/chrout_screen_clr.s | 4 +-- c64/kernal/screen/chrout_screen_home.s | 5 --- c64/kernal/screen/chrout_screen_return.s | 6 ++-- c64/kernal/screen/clear_screen_real.s | 2 +- .../screen/e56c.screen_calculate_pnt_user.s | 8 +++-- c64/kernal/{,stubs => screen}/e9ff.interop | 0 c64/kernal/screen/e9ff.screen_clear_line.s | 34 +++++++++++++++++++ .../screen/screen_advance_to_next_line.s | 4 +-- c64/kernal/screen/screen_grow_logical_line.s | 5 +-- 11 files changed, 50 insertions(+), 24 deletions(-) delete mode 100644 c64/kernal/,stubs/e9ff.clear_line.s rename c64/kernal/{,stubs => screen}/e9ff.interop (100%) create mode 100644 c64/kernal/screen/e9ff.screen_clear_line.s diff --git a/STATUS.md b/STATUS.md index 3ba2e3d0..0768d8bb 100644 --- a/STATUS.md +++ b/STATUS.md @@ -245,7 +245,7 @@ Not all of them - only these we want to have implemented. | `$E8DA` | color code table | DONE | | | `$E8EA` | scroll line | NOT DONE | | | `$E96C` | insert line on top | NOT DONE | | -| `$E9FF` | clear line | NOT DONE | | +| `$E9FF` | clear line | DONE | | | `$EA31` | default IRQ | PARTIAL | | | `$EA7E` | ack CIA1 + below | DONE | | | `$EA81` | ret from IRQ/NMI | DONE | | diff --git a/c64/kernal/,stubs/e9ff.clear_line.s b/c64/kernal/,stubs/e9ff.clear_line.s deleted file mode 100644 index 4e5b7d5f..00000000 --- a/c64/kernal/,stubs/e9ff.clear_line.s +++ /dev/null @@ -1,4 +0,0 @@ - -// XXX provide documentation and implementation - - STUB_IMPLEMENTATION() diff --git a/c64/kernal/screen/chrout_screen_clr.s b/c64/kernal/screen/chrout_screen_clr.s index 1fb48047..ab9469dd 100644 --- a/c64/kernal/screen/chrout_screen_clr.s +++ b/c64/kernal/screen/chrout_screen_clr.s @@ -3,9 +3,7 @@ // CLR key handling within CHROUT // -chrout_screen_CLR: /* YYY disabled for rework +chrout_screen_CLR: jsr clear_screen jmp chrout_screen_done - -*/ diff --git a/c64/kernal/screen/chrout_screen_home.s b/c64/kernal/screen/chrout_screen_home.s index ef800ca9..77976bd0 100644 --- a/c64/kernal/screen/chrout_screen_home.s +++ b/c64/kernal/screen/chrout_screen_home.s @@ -4,12 +4,7 @@ // -chrout_screen_HOME: - rts - -/* YYY disabled for rework chrout_screen_HOME: jsr cursor_home jmp chrout_screen_done -*/ \ No newline at end of file diff --git a/c64/kernal/screen/chrout_screen_return.s b/c64/kernal/screen/chrout_screen_return.s index d8313f24..b870cd5b 100644 --- a/c64/kernal/screen/chrout_screen_return.s +++ b/c64/kernal/screen/chrout_screen_return.s @@ -4,13 +4,11 @@ // -chrout_screen_RETURN: /* YYY disabled for rework +chrout_screen_RETURN: // RETURN clears quote and insert modes, it also clears reverse flag lda #$00 sta QTSW sta INSRT sta RVS - jmp chrout_screen_advance_to_next_line - -*/ + jmp screen_advance_to_next_line diff --git a/c64/kernal/screen/clear_screen_real.s b/c64/kernal/screen/clear_screen_real.s index 5766dbf6..2094cb9a 100644 --- a/c64/kernal/screen/clear_screen_real.s +++ b/c64/kernal/screen/clear_screen_real.s @@ -19,7 +19,7 @@ clear_screen_real: dey bpl !- - // YYY flow can probably be size-optimized, by clearing a single row each time (we will need such a subroutine) + // YYY flow can probably be size-optimized by calling screen_clear_line in a loop // Clear screen character RAM. Unfortunately, the HIBASE value is not on the zero page, // we will reuse PNT (it will be overridden in a moment nevertheless) as the pointer diff --git a/c64/kernal/screen/e56c.screen_calculate_pnt_user.s b/c64/kernal/screen/e56c.screen_calculate_pnt_user.s index d1d247ce..bb24ddfc 100644 --- a/c64/kernal/screen/e56c.screen_calculate_pnt_user.s +++ b/c64/kernal/screen/e56c.screen_calculate_pnt_user.s @@ -9,7 +9,11 @@ screen_calculate_PNT_USER: - // YYY jsr screen_normalize_xy - do we need this? probably not + ldx TBLX + + // FALLTROUGH + +screen_calculate_PNT_USER_from_X: // entry point for screen_clear_line // Reset pointer to start of screen @@ -20,7 +24,7 @@ screen_calculate_PNT_USER: // Add 40 to PNT for every line - ldx TBLX + cpx #$00 beq screen_calculate_USER !: lda #40 diff --git a/c64/kernal/,stubs/e9ff.interop b/c64/kernal/screen/e9ff.interop similarity index 100% rename from c64/kernal/,stubs/e9ff.interop rename to c64/kernal/screen/e9ff.interop diff --git a/c64/kernal/screen/e9ff.screen_clear_line.s b/c64/kernal/screen/e9ff.screen_clear_line.s new file mode 100644 index 00000000..fc347e18 --- /dev/null +++ b/c64/kernal/screen/e9ff.screen_clear_line.s @@ -0,0 +1,34 @@ + +// +// Well-known routine, described in: +// +// - [CM64] Computes Mapping the Commodore 64 - page 219 +// - http://sta.c64.org/cbm64scrfunc.html +// +// input: .X - screen line to clear +// +// Checked that original routine preserves X (convenient for loops), +// and leaves space screen code in .A, so duplicate this behaviour +// + + +screen_clear_line: + + // First, calculate PNT and USER + phx_trash_a + jsr screen_calculate_PNT_USER_from_X + plx_trash_a + + // Now clear the line + ldy #39 +!: + lda COLOR + sta (USER), y + lda #$20 // space character screen code + sta (PNT), y + + dey + bpl !- + + // Done + rts diff --git a/c64/kernal/screen/screen_advance_to_next_line.s b/c64/kernal/screen/screen_advance_to_next_line.s index fce5a5a5..6c12dc63 100644 --- a/c64/kernal/screen/screen_advance_to_next_line.s +++ b/c64/kernal/screen/screen_advance_to_next_line.s @@ -1,8 +1,8 @@ screen_advance_to_next_line: -.break - rts + + jmp screen_advance_to_next_line /* YYY disabled for rework diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index 49546a66..9a1caa8b 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -6,8 +6,9 @@ screen_grow_logical_line_done: screen_grow_logical_line: -.break - rts + + jmp screen_grow_logical_line // YYY + /* YYY disabled for rework From da2fa7ac906ff20cf94a4c7a63b8bfeb8468e449 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 3 Jan 2020 20:48:38 +0100 Subject: [PATCH 13/77] size-optimized screen clearing --- c64/kernal/screen/clear_screen_real.s | 58 +---------------------- c64/kernal/screen/e544.clear_screen.jmp.s | 11 ----- c64/kernal/screen/e544.clear_screen.s | 30 ++++++++++++ 3 files changed, 31 insertions(+), 68 deletions(-) delete mode 100644 c64/kernal/screen/e544.clear_screen.jmp.s create mode 100644 c64/kernal/screen/e544.clear_screen.s diff --git a/c64/kernal/screen/clear_screen_real.s b/c64/kernal/screen/clear_screen_real.s index 2094cb9a..eaad8592 100644 --- a/c64/kernal/screen/clear_screen_real.s +++ b/c64/kernal/screen/clear_screen_real.s @@ -7,60 +7,4 @@ clear_screen_real: - - // Clear the line link table - cheecked on original ROMs, - // the highest bit set means that the line is NOT a logical - // continuation of the previous one - - lda #$80 - ldy #24 -!: - sta LDTBL,y - dey - bpl !- - - // YYY flow can probably be size-optimized by calling screen_clear_line in a loop - - // Clear screen character RAM. Unfortunately, the HIBASE value is not on the zero page, - // we will reuse PNT (it will be overridden in a moment nevertheless) as the pointer - - iny // sets .Y to 0 - sty PNT+0 - lda HIBASE - sta PNT+1 - - ldx #$03 // countdown for pages to update - -clear_screen_loop: - - ldy #$00 - lda #$20 // space character screen code -!: - sta (PNT),y - iny - cpy #250 // clear 250 bytes only, do not cross 1000 bytes barrier - bne !- - - lda PNT+0 - clc - adc #250 - sta PNT+0 - bcc !+ - inc PNT+1 -!: - dex - bpl clear_screen_loop - - // Now clear the colour RAM - .Y is now 250, make use of this fact - - lda COLOR -!: - sta $D800 - 1 + 250 * 0, y - sta $D800 - 1 + 250 * 1, y - sta $D800 - 1 + 250 * 2, y - sta $D800 - 1 + 250 * 3, y - dey - bne !- - - // Fall to cursor home routine - jmp cursor_home + rts \ No newline at end of file diff --git a/c64/kernal/screen/e544.clear_screen.jmp.s b/c64/kernal/screen/e544.clear_screen.jmp.s deleted file mode 100644 index 1e9b4a2e..00000000 --- a/c64/kernal/screen/e544.clear_screen.jmp.s +++ /dev/null @@ -1,11 +0,0 @@ - -// -// Clear screen and initialise line link table, described in: -// -// - [CM64] Computes Mapping the Commodore 64 - pages 215-216 -// - - -clear_screen: - - jmp clear_screen_real diff --git a/c64/kernal/screen/e544.clear_screen.s b/c64/kernal/screen/e544.clear_screen.s new file mode 100644 index 00000000..1ee9bec9 --- /dev/null +++ b/c64/kernal/screen/e544.clear_screen.s @@ -0,0 +1,30 @@ + +// +// Clear screen and initialise line link table, described in: +// +// - [CM64] Computes Mapping the Commodore 64 - pages 215-216 +// + + +clear_screen: + + // Clear the line link table - cheecked on original ROMs, + // the highest bit set means that the line is NOT a logical + // continuation of the previous one + + lda #$80 + ldy #24 +!: + sta LDTBL,y + dey + bpl !- + + // Clear all the rows + ldx #24 +!: + jsr screen_clear_line + dex + bpl !- + + // Fall to cursor home routine + jmp cursor_home From d583ad6f10c0b356bbc5b1965103f78e9dac185e Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 3 Jan 2020 21:16:34 +0100 Subject: [PATCH 14/77] reworked advancing to the next line --- c64/kernal/screen/chrout_screen_crsr.s | 8 +-- c64/kernal/screen/chrout_screen_del.s | 2 +- c64/kernal/screen/chrout_screen_ins.s | 2 +- c64/kernal/screen/chrout_screen_tab.s | 4 +- c64/kernal/screen/e50a.plot.s | 8 +-- .../screen/screen_advance_to_next_line.s | 50 ++++--------------- .../screen/screen_scroll_up_if_on_last_line.s | 5 +- 7 files changed, 23 insertions(+), 56 deletions(-) diff --git a/c64/kernal/screen/chrout_screen_crsr.s b/c64/kernal/screen/chrout_screen_crsr.s index 78bd2a71..1eb85249 100644 --- a/c64/kernal/screen/chrout_screen_crsr.s +++ b/c64/kernal/screen/chrout_screen_crsr.s @@ -5,13 +5,13 @@ chrout_screen_CRSR_UP: - rts + jmp chrout_screen_done chrout_screen_CRSR_DOWN: - rts + jmp chrout_screen_done chrout_screen_CRSR_LEFT: - rts + jmp chrout_screen_done chrout_screen_CRSR_RIGHT: - rts + jmp chrout_screen_done /* YYY disabled for rework chrout_screen_CRSR_UP: diff --git a/c64/kernal/screen/chrout_screen_del.s b/c64/kernal/screen/chrout_screen_del.s index c7bb1274..0a5521f8 100644 --- a/c64/kernal/screen/chrout_screen_del.s +++ b/c64/kernal/screen/chrout_screen_del.s @@ -4,7 +4,7 @@ // chrout_screen_DEL: - rts + jmp chrout_screen_done /* YYY disabled for rework chrout_screen_DEL: diff --git a/c64/kernal/screen/chrout_screen_ins.s b/c64/kernal/screen/chrout_screen_ins.s index 81493f88..311637f3 100644 --- a/c64/kernal/screen/chrout_screen_ins.s +++ b/c64/kernal/screen/chrout_screen_ins.s @@ -4,7 +4,7 @@ // chrout_screen_INS: - rts + jmp chrout_screen_done /* YYY disabled for rework chrout_screen_INS: diff --git a/c64/kernal/screen/chrout_screen_tab.s b/c64/kernal/screen/chrout_screen_tab.s index bd94c16f..80178e56 100644 --- a/c64/kernal/screen/chrout_screen_tab.s +++ b/c64/kernal/screen/chrout_screen_tab.s @@ -7,9 +7,9 @@ #if CONFIG_EDIT_TABULATORS chrout_screen_TAB_FW: - rts + jmp chrout_screen_done chrout_screen_TAB_BW: - rts + jmp chrout_screen_done /* YYY disabled for rework chrout_screen_TAB_FW: diff --git a/c64/kernal/screen/e50a.plot.s b/c64/kernal/screen/e50a.plot.s index 627eced5..014c5c07 100644 --- a/c64/kernal/screen/e50a.plot.s +++ b/c64/kernal/screen/e50a.plot.s @@ -9,11 +9,8 @@ // -plot_set: - rts +PLOT: - -PLOT: /* YYY disabled for rework bcs plot_get // Note: the 'set' part has to start from $E50C, as this is a known address @@ -26,7 +23,7 @@ plot_set: sty PNTR stx TBLX - jsr screen_calculate_line_pointer + jsr screen_calculate_PNT_USER // FALLTROUGH to save one byte on RTS @@ -35,4 +32,3 @@ plot_get: ldy PNTR ldx TBLX rts -*/ \ No newline at end of file diff --git a/c64/kernal/screen/screen_advance_to_next_line.s b/c64/kernal/screen/screen_advance_to_next_line.s index 6c12dc63..b55f7018 100644 --- a/c64/kernal/screen/screen_advance_to_next_line.s +++ b/c64/kernal/screen/screen_advance_to_next_line.s @@ -2,50 +2,18 @@ screen_advance_to_next_line: - jmp screen_advance_to_next_line - -/* YYY disabled for rework - - // Go to start of line + // Go to start of the line lda #0 sta PNTR - // Advance line number + + // Check if we are at the bottom of the screen ldy TBLX + cpy #$24 + bne !+ - // Do quick fix to line pointer to work out if it is off - // the bottom of the screen. - ldx #40 - lda LDTBL,y - bmi !+ - .byte $2c -!: ldx #80 - txa - clc - adc PNT+0 - sta PNT+0 - lda PNT+1 - adc #0 - sta PNT+1 - - inc TBLX - - // Check if it will trigger scrolling - // Work out if we have gone off the bottom of the screen? - // 1040 > 1024, so if high byte of screen pointer is >= (HIBASE+4), - // then we are off the bottom of the screen - lda PNT+1 - sec - sbc HIBASE - cmp #3 - bcc !+ - lda PNT+0 - cmp #$e7 - bcc !+ - - // Off the bottom of the screen - jsr scroll_screen_up + // We need to scroll the screen up + jsr screen_scroll_up + skip_2_bytes_trash_nvz !: - + inc TBLX jmp chrout_screen_calc_lptr_done - -*/ diff --git a/c64/kernal/screen/screen_scroll_up_if_on_last_line.s b/c64/kernal/screen/screen_scroll_up_if_on_last_line.s index 30008068..42888bca 100644 --- a/c64/kernal/screen/screen_scroll_up_if_on_last_line.s +++ b/c64/kernal/screen/screen_scroll_up_if_on_last_line.s @@ -1,5 +1,8 @@ -/* YYY disabled for rework +screen_scroll_up: + rts + +/* YYY disabled for rework, add CTRL and NO_SCROLL support not_last_line: rts From 9d6814b39e8ad983506cba275002cd02c70cb9ae Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 3 Jan 2020 21:31:28 +0100 Subject: [PATCH 15/77] reenabled scren cursor --- c64/kernal/interrupts/ea31.default_irq_handler.s | 4 ++-- c64/kernal/screen/cursor.s | 11 +++-------- c64/kernal/screen/cursor_show.s | 4 ---- c64/kernal/screen/screen_add_40_to_pntr.s | 2 ++ 4 files changed, 7 insertions(+), 14 deletions(-) diff --git a/c64/kernal/interrupts/ea31.default_irq_handler.s b/c64/kernal/interrupts/ea31.default_irq_handler.s index 67912afd..be964c9f 100644 --- a/c64/kernal/interrupts/ea31.default_irq_handler.s +++ b/c64/kernal/interrupts/ea31.default_irq_handler.s @@ -11,8 +11,8 @@ default_irq_handler: #endif // CONFIG_RS232_UP9600 -/* YYY disabled for rework - jsr cursor_blink */ + + jsr cursor_blink jsr JSCNKEY jsr JUDTIM // update jiffy clock diff --git a/c64/kernal/screen/cursor.s b/c64/kernal/screen/cursor.s index fdf585c6..d9d3d66c 100644 --- a/c64/kernal/screen/cursor.s +++ b/c64/kernal/screen/cursor.s @@ -11,13 +11,7 @@ // - PNTR (current screen x position) // -cursor_disable: - rts -cursor_hide_if_visible: - rts - -/* YYY disabled for rework cursor_blink: // Is the cursor enabled? lda BLNSW @@ -34,9 +28,10 @@ cursor_blink: // FALLTROUGH cursor_draw: - jsr screen_calculate_line_pointer // XXX try to make this call not needed + jsr screen_calculate_PNT_USER // YYY try to make this call not needed ldy PNTR + // XXX clip PNTR to 0-39 lda (PNT),y sta GDBLN eor #$80 @@ -66,6 +61,7 @@ cursor_undraw: lda GDBLN ldy PNTR + // XXX clip PNTR to 0-39 sta (PNT),y lda GDCOL sta (USER),y @@ -85,4 +81,3 @@ cursor_blink_timer_reset: cursor_blink_end: rts -*/ \ No newline at end of file diff --git a/c64/kernal/screen/cursor_show.s b/c64/kernal/screen/cursor_show.s index 3c29c870..6cd78afe 100644 --- a/c64/kernal/screen/cursor_show.s +++ b/c64/kernal/screen/cursor_show.s @@ -6,10 +6,7 @@ // - BLNCT (cursor blink countdown) // -cursor_show_if_enabled: - rts -/* YYY disabled for rework cursor_show_if_enabled: lda BLNSW bne cursor_show_end @@ -36,4 +33,3 @@ cursor_show: cursor_show_end: rts -*/ diff --git a/c64/kernal/screen/screen_add_40_to_pntr.s b/c64/kernal/screen/screen_add_40_to_pntr.s index ff5d9f36..7e4b2c46 100644 --- a/c64/kernal/screen/screen_add_40_to_pntr.s +++ b/c64/kernal/screen/screen_add_40_to_pntr.s @@ -1,4 +1,5 @@ +/* YYY disabled - most likely not needed screen_add_40_to_PNTR: @@ -8,3 +9,4 @@ screen_add_40_to_PNTR: sta PNTR rts +*/ \ No newline at end of file From 25feff3fe2bbd4a67e533b0f0929f389405047dc Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sat, 4 Jan 2020 10:43:11 +0100 Subject: [PATCH 16/77] fix for screen line advance --- c64/kernal/screen/screen_advance_to_next_line.s | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/c64/kernal/screen/screen_advance_to_next_line.s b/c64/kernal/screen/screen_advance_to_next_line.s index b55f7018..0a8f2baa 100644 --- a/c64/kernal/screen/screen_advance_to_next_line.s +++ b/c64/kernal/screen/screen_advance_to_next_line.s @@ -2,10 +2,6 @@ screen_advance_to_next_line: - // Go to start of the line - lda #0 - sta PNTR - // Check if we are at the bottom of the screen ldy TBLX cpy #$24 @@ -16,4 +12,17 @@ screen_advance_to_next_line: skip_2_bytes_trash_nvz !: inc TBLX + + // Set PNTR to 0 or 40 (for continued line) + ldy TBLX + lda LDTBL, y + and #$80 + bne !+ + + lda #40 + skip_2_bytes_trash_nvz +!: + lda #$00 + sta PNTR + jmp chrout_screen_calc_lptr_done From 870de4e4323e16ab44c1cf307d69285b1d783d4b Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sat, 4 Jan 2020 11:22:33 +0100 Subject: [PATCH 17/77] do not output unneeded spaces in BASIC messages --- c64/basic/print_packed_message.s | 36 +++++++++++++++++++------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/c64/basic/print_packed_message.s b/c64/basic/print_packed_message.s index efed0e6a..2f44a411 100644 --- a/c64/basic/print_packed_message.s +++ b/c64/basic/print_packed_message.s @@ -30,22 +30,34 @@ packed_message_search: sec rts -found_message_in_token_stream: +found_message_in_token_stream: // XXX size-optimize this // Now print each word in the message phy_trash_a lda packed_message_tokens,y - cmp #$ff - beq !+ + cmp #$FF + beq found_message_in_token_stream_done + jsr print_packed_word - jsr print_space ply_trash_a iny - bne found_message_in_token_stream + beq found_message_in_token_stream_done !: + phy_trash_a + lda packed_message_tokens,y + cmp #$FF + beq found_message_in_token_stream_done + + pha + jsr print_space + pla + + jsr print_packed_word + ply_trash_a + iny + bne !- + +found_message_in_token_stream_done: pla - // Rub out space at the end - lda #$14 - jsr JCHROUT rts print_packed_word: @@ -93,7 +105,7 @@ packed_word_search: found_packed_word: // Get pointer to start of packed word - // Make sure we don't wrap on a page boundary + // Make sure we do not wrap on a page boundary tya clc adc FRESPC+0 @@ -136,15 +148,11 @@ next_packed_word_char: lsr tax - // Save Y so it doesn't get clobbered by CHROUT - phy_trash_a - // X=1-14 = first 14 chars, so subtract one lda packed_message_chars-1,x - jsr JCHROUT + jsr JCHROUT // preserves .Y // See if there is a char in the low nybl to print - ply_trash_a lda (FRESPC),y and #$0f beq end_of_packed_word From 44df124fc7b1d3186a1cef9a692400ca02b8c870 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 5 Jan 2020 17:27:37 +0100 Subject: [PATCH 18/77] started work on screen scroll --- c64/kernal/iec/iec_wait1ms.s | 6 +- .../screen/screen_advance_to_next_line.s | 3 +- ...p_if_on_last_line.s => screen_scroll_up.s} | 107 +++++++++++++++++- 3 files changed, 108 insertions(+), 8 deletions(-) rename c64/kernal/screen/{screen_scroll_up_if_on_last_line.s => screen_scroll_up.s} (59%) diff --git a/c64/kernal/iec/iec_wait1ms.s b/c64/kernal/iec/iec_wait1ms.s index 4e81fb14..4e05f18e 100644 --- a/c64/kernal/iec/iec_wait1ms.s +++ b/c64/kernal/iec/iec_wait1ms.s @@ -16,9 +16,8 @@ iec_wait1ms: ldx #18 // we probably won't start with the beginning of raster #endif // CONFIG_IEC -#if CONFIG_IEC || (!CONFIG_TAPE_NO_MOTOR_CONTROL && (CONFIG_TAPE_TURBO || CONFIG_TAPE_NORMAL)) -wait_x_bars: // additional entry point for tape support +wait_x_bars: // additional entry point for delayy in screen and tape support // has to preserve .Y and put .X to 0 lda VIC_RASTER @@ -32,6 +31,3 @@ wait_x_bars: // additional entry point for tape support iec_wait_rts: // dummy RTS, for very short waits rts - - -#endif diff --git a/c64/kernal/screen/screen_advance_to_next_line.s b/c64/kernal/screen/screen_advance_to_next_line.s index 0a8f2baa..15a56d60 100644 --- a/c64/kernal/screen/screen_advance_to_next_line.s +++ b/c64/kernal/screen/screen_advance_to_next_line.s @@ -4,12 +4,11 @@ screen_advance_to_next_line: // Check if we are at the bottom of the screen ldy TBLX - cpy #$24 + cpy #24 bne !+ // We need to scroll the screen up jsr screen_scroll_up - skip_2_bytes_trash_nvz !: inc TBLX diff --git a/c64/kernal/screen/screen_scroll_up_if_on_last_line.s b/c64/kernal/screen/screen_scroll_up.s similarity index 59% rename from c64/kernal/screen/screen_scroll_up_if_on_last_line.s rename to c64/kernal/screen/screen_scroll_up.s index 42888bca..d50f2304 100644 --- a/c64/kernal/screen/screen_scroll_up_if_on_last_line.s +++ b/c64/kernal/screen/screen_scroll_up.s @@ -1,7 +1,110 @@ +// +// Scroll the whole screen up by 1 logical line +// + + screen_scroll_up: + + // Preserve SAL and EAL + + lda SAL+0 + pha + lda SAL+1 + pha + lda EAL+0 + pha + lda EAL+1 + pha + +screen_scroll_up_next: + +#if CONFIG_KEYBOARD_C128 || CONFIG_KEYBOARD_C65 + + // Do not scroll if NO_SCRL is pressed and interrupts are enabled +!: + php + pla + and #%00000010 + bne !+ // branch if IRQs disabled, we cannot detect NO_SCRL status + + lda SHFLAG + and #KEY_FLAG_NO_SCRL + bne !- +!: +#endif + + // Check if CTRL key pressed - if so, perform a delay + + lda SHFLAG + and #KEY_FLAG_CTRL + beq screen_scroll_up_delay_done + + ldy #$03 +!: + ldx #$FF + jsr wait_x_bars + dey + bne !- + +screen_scroll_up_delay_done: + + // First scroll the LDTBL (line link table) + + ldy #$00 +!: + lda LDTBL+1, y + sta LDTBL+0, y + iny + cpy #24 + bne !- + + lda #$80 + sta LDTBL+24 + + // Now, we need to scroll both screen memory and color memory + + + + // YYY implement + + + + + // Clear the newly introduced line + + ldx #24 + jsr screen_clear_line + + // Decrement the current physical line number + + dec TBLX + + // If the first line is linked, scroll once more + + bit LDTBL+0 + bpl screen_scroll_up_next + + // Restore SAL and EAL + + pla + sta EAL+1 + pla + sta EAL+0 + pla + sta SAL+1 + pla + sta SAL+0 + + // Return + rts + + + + + /* YYY disabled for rework, add CTRL and NO_SCROLL support not_last_line: @@ -30,7 +133,9 @@ is_last_line: dec TBLX - // FALLTHROUGH + // FALLTHROUGH to screen_scroll_up + + scroll_screen_up: From c84091291ae1f9eabbe6c1887e0f5473ddc58dbb Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 5 Jan 2020 18:06:25 +0100 Subject: [PATCH 19/77] screen scroll rework finished --- c64/kernal/screen/screen_scroll_up.s | 200 ++++++++++----------------- 1 file changed, 71 insertions(+), 129 deletions(-) diff --git a/c64/kernal/screen/screen_scroll_up.s b/c64/kernal/screen/screen_scroll_up.s index d50f2304..74cfdf82 100644 --- a/c64/kernal/screen/screen_scroll_up.s +++ b/c64/kernal/screen/screen_scroll_up.s @@ -6,18 +6,6 @@ screen_scroll_up: - // Preserve SAL and EAL - - lda SAL+0 - pha - lda SAL+1 - pha - lda EAL+0 - pha - lda EAL+1 - pha - -screen_scroll_up_next: #if CONFIG_KEYBOARD_C128 || CONFIG_KEYBOARD_C65 @@ -62,14 +50,76 @@ screen_scroll_up_delay_done: lda #$80 sta LDTBL+24 - // Now, we need to scroll both screen memory and color memory + // Preserve SAL and EAL + lda SAL+0 + pha + lda SAL+1 + pha + lda EAL+0 + pha + lda EAL+1 + pha + // Now, we need to scroll both screen memory and color memory; first create start/end pointers - // YYY implement + lda HIBASE + sta SAL+1 + sta EAL+1 + lda #>$D800 + sta PNT+1 + sta USER+1 + lda #$00 + sta EAL+0 + sta USER+0 + lda #40 + sta SAL+0 + sta PNT+0 + // Now copy, SAL->EAL, PNT->USER, in a loop + + ldy #$00 + +screen_scroll_up_loop: + + lda (SAL), y + sta (EAL), y + lda (PNT), y + sta (USER), y + + // Check if this was the last byte (last destination byte for color copy is #DBBF) + + cpy #$BF + bne !+ // definitely not the last byte + lda USER+1 + cmp #$DB + beq screen_scroll_up_loop_done +!: + // Increment .Y, possibly advance pointers + + iny + bne screen_scroll_up_loop + + inc SAL+1 + inc EAL+1 + inc USER+1 + inc PNT+1 + bne screen_scroll_up_loop // branch alwayys + +screen_scroll_up_loop_done: + + // Restore SAL and EAL + + pla + sta EAL+1 + pla + sta EAL+0 + pla + sta SAL+1 + pla + sta SAL+0 // Clear the newly introduced line @@ -83,22 +133,15 @@ screen_scroll_up_delay_done: // If the first line is linked, scroll once more bit LDTBL+0 - bpl screen_scroll_up_next +#if CONFIG_KEYBOARD_C128 || CONFIG_KEYBOARD_C65 + bpl_far screen_scroll_up +#else + bpl screen_scroll_up +#endif - // Restore SAL and EAL - - pla - sta EAL+1 - pla - sta EAL+0 - pla - sta SAL+1 - pla - sta SAL+0 + // Recalculate PNT and USER - // Return - - rts + jmp screen_calculate_PNT_USER @@ -135,105 +178,4 @@ is_last_line: // FALLTHROUGH to screen_scroll_up - - -scroll_screen_up: - - // Preserve EAL - lda EAL+0 - pha - lda EAL+1 - pha - - // Now scroll the whole screen up either one or two lines - // based on whether the first screen line is linked or not. - - // Get pointers to start of screen + colour RAM - lda HIBASE - sta PNT+1 - sta SAL+1 - lda #>$D800 - sta USER+1 - sta EAL+1 - lda #$00 - sta PNT+0 - sta USER+0 - - // Get pointers to screen/colour RAM source - lda LDTBL+0 - bmi !+ - lda #40 - .byte $2C // BIT $nnnn to skip next instruction -!: - lda #80 - sta SAL+0 - sta EAL+0 - - // Copy first three pages - ldy #$00 - ldx #3 -scroll_copy_loop: - lda (EAL),y - sta (USER),y - lda (SAL),y - sta (PNT),y - - iny - bne scroll_copy_loop - - inc SAL+1 - inc PNT+1 - inc EAL+1 - inc USER+1 - dex - bne scroll_copy_loop - - // Copy last partial page - // We need to copy 1000-(3*256)-line length - // = 232 - line length - lda SAL+0 - lda #232 - sec - sbc SAL+0 - tax -scroll_copy_loop2: - lda (EAL),y - sta (USER),y - lda (SAL),y - sta (PNT),y - iny - dex - bne scroll_copy_loop2 - - // Restore EAL - pla - sta EAL+1 - pla - sta EAL+0 - - // Fill in scrolled up area - ldx SAL+0 -scroll_copy_loop3: - lda COLOR - sta (USER),y - lda #$20 - sta (PNT),y - iny - dex - bne scroll_copy_loop3 - - // Shift line linkage list - ldy #0 - ldx #24 -link_copy: - lda LDTBL+1,y - sta LDTBL+0,y - iny - dex - bne link_copy - // Clear line link flag of last line - stx LDTBL+24 - - // Restore correct line pointers - jmp screen_calculate_line_pointer */ \ No newline at end of file From c80869b6ad1460578ade0343797e8f5eca02b497 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 5 Jan 2020 18:10:21 +0100 Subject: [PATCH 20/77] fix unneeded zeroing PNTR --- c64/kernal/screen/chrout_screen.s | 2 -- 1 file changed, 2 deletions(-) diff --git a/c64/kernal/screen/chrout_screen.s b/c64/kernal/screen/chrout_screen.s index 673fb4c3..a1700951 100644 --- a/c64/kernal/screen/chrout_screen.s +++ b/c64/kernal/screen/chrout_screen.s @@ -120,8 +120,6 @@ chrout_screen_literal: // Advance to the next line - lda #0 - sta PNTR jmp screen_advance_to_next_line chrout_screen_calc_lptr_done: From 9b70b8afb980db02fc779c9e39a5cca2a24651e7 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 5 Jan 2020 18:32:54 +0100 Subject: [PATCH 21/77] PNTR handling fix, tweaked CTRL key scroll delay --- c64/kernal/screen/chrout_screen.s | 10 ++-------- c64/kernal/screen/cursor.s | 7 ++----- c64/kernal/screen/screen_get_cliped_pntr.s | 15 +++++++++++++++ c64/kernal/screen/screen_scroll_up.s | 2 +- 4 files changed, 20 insertions(+), 14 deletions(-) create mode 100644 c64/kernal/screen/screen_get_cliped_pntr.s diff --git a/c64/kernal/screen/chrout_screen.s b/c64/kernal/screen/chrout_screen.s index a1700951..328cc0ba 100644 --- a/c64/kernal/screen/chrout_screen.s +++ b/c64/kernal/screen/chrout_screen.s @@ -63,15 +63,9 @@ chrout_screen_literal: tax // store screen code, we need .A for calculations - // First we need offset from PNT in .Y, we can take it from PNTR (0-79) + // First we need offset from PNT in .Y, we can take it from PNTR - lda PNTR - cmp #40 - bcc !+ - sec - sbc #40 -!: - tay + jsr screen_get_clipped_PNTR // Put the character on the screen diff --git a/c64/kernal/screen/cursor.s b/c64/kernal/screen/cursor.s index d9d3d66c..2e2d2748 100644 --- a/c64/kernal/screen/cursor.s +++ b/c64/kernal/screen/cursor.s @@ -28,10 +28,8 @@ cursor_blink: // FALLTROUGH cursor_draw: - jsr screen_calculate_PNT_USER // YYY try to make this call not needed - ldy PNTR - // XXX clip PNTR to 0-39 + jsr screen_get_clipped_PNTR lda (PNT),y sta GDBLN eor #$80 @@ -59,9 +57,8 @@ cursor_hide_if_visible: cursor_undraw: + jsr screen_get_clipped_PNTR lda GDBLN - ldy PNTR - // XXX clip PNTR to 0-39 sta (PNT),y lda GDCOL sta (USER),y diff --git a/c64/kernal/screen/screen_get_cliped_pntr.s b/c64/kernal/screen/screen_get_cliped_pntr.s new file mode 100644 index 00000000..c0c85963 --- /dev/null +++ b/c64/kernal/screen/screen_get_cliped_pntr.s @@ -0,0 +1,15 @@ + +// +// Get PNTR value clipped to 0-39 range in .Y, can trash .A +// + +screen_get_clipped_PNTR: + + ldy PNTR + cpy #40 + bcc !+ + tya + sbc #40 + tay +!: + rts diff --git a/c64/kernal/screen/screen_scroll_up.s b/c64/kernal/screen/screen_scroll_up.s index 74cfdf82..2314dd2a 100644 --- a/c64/kernal/screen/screen_scroll_up.s +++ b/c64/kernal/screen/screen_scroll_up.s @@ -28,7 +28,7 @@ screen_scroll_up: and #KEY_FLAG_CTRL beq screen_scroll_up_delay_done - ldy #$03 + ldy #$09 !: ldx #$FF jsr wait_x_bars From 82c7c228313d6de204df1876dd989793c7a9fa21 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 5 Jan 2020 19:06:46 +0100 Subject: [PATCH 22/77] fixed 6510 port direction value --- c64/kernal/init/fda3.ioinit.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/c64/kernal/init/fda3.ioinit.s b/c64/kernal/init/fda3.ioinit.s index 0ca661f9..549e245a 100644 --- a/c64/kernal/init/fda3.ioinit.s +++ b/c64/kernal/init/fda3.ioinit.s @@ -22,8 +22,8 @@ IOINIT: ldx #$27 stx CPU_R6510 - ldx #$EF - stx CPU_D6510 // [CM64] page 4 + ldx #$2F // checked real ROM value + stx CPU_D6510 // // Now prevent the CIAs from generating interrupts, who knows what damage they can do From ca0d316948ef0cce3b03cc2230a118a4b21e07a4 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 5 Jan 2020 21:59:17 +0100 Subject: [PATCH 23/77] provided screen scroll up unofficial routine --- STATUS.md | 4 +- c64/kernal/,stubs/e8ea.scroll_line.s | 4 - c64/kernal/{,stubs => screen}/e8ea.interop | 0 ...en_scroll_up.s => e8ea.screen_scroll_up.s} | 78 ++----------------- c64/kernal/screen/screen_grow_logical_line.s | 51 ++++++------ c64/kernal/screen/screen_scroll_delay.s | 40 ++++++++++ 6 files changed, 76 insertions(+), 101 deletions(-) delete mode 100644 c64/kernal/,stubs/e8ea.scroll_line.s rename c64/kernal/{,stubs => screen}/e8ea.interop (100%) rename c64/kernal/screen/{screen_scroll_up.s => e8ea.screen_scroll_up.s} (53%) create mode 100644 c64/kernal/screen/screen_scroll_delay.s diff --git a/STATUS.md b/STATUS.md index 0768d8bb..f3574c3c 100644 --- a/STATUS.md +++ b/STATUS.md @@ -235,7 +235,7 @@ Not all of them - only these we want to have implemented. | `$E518` | legacy part of CINT | DONE | | | `$E51B` | init screen keyboard, no VIC | DONE | | | `$E544` | clear screen | DONE | | -| `$E50C` | set cursor position | PARTIAL | | +| `$E50C` | set cursor position | DONE | | | `$E566` | home cursor | DONE | | | `$E56C` | set PNT and USER values | DONE | | | `$E5A0` | setup VIC II & I/O | DONE | | @@ -243,7 +243,7 @@ Not all of them - only these we want to have implemented. | `$E701` | previous line | NOT DONE | | | `$E716` | screen CHROUT | NOT DONE | | | `$E8DA` | color code table | DONE | | -| `$E8EA` | scroll line | NOT DONE | | +| `$E8EA` | scroll logical line up | DONE | | | `$E96C` | insert line on top | NOT DONE | | | `$E9FF` | clear line | DONE | | | `$EA31` | default IRQ | PARTIAL | | diff --git a/c64/kernal/,stubs/e8ea.scroll_line.s b/c64/kernal/,stubs/e8ea.scroll_line.s deleted file mode 100644 index 4e5b7d5f..00000000 --- a/c64/kernal/,stubs/e8ea.scroll_line.s +++ /dev/null @@ -1,4 +0,0 @@ - -// XXX provide documentation and implementation - - STUB_IMPLEMENTATION() diff --git a/c64/kernal/,stubs/e8ea.interop b/c64/kernal/screen/e8ea.interop similarity index 100% rename from c64/kernal/,stubs/e8ea.interop rename to c64/kernal/screen/e8ea.interop diff --git a/c64/kernal/screen/screen_scroll_up.s b/c64/kernal/screen/e8ea.screen_scroll_up.s similarity index 53% rename from c64/kernal/screen/screen_scroll_up.s rename to c64/kernal/screen/e8ea.screen_scroll_up.s index 2314dd2a..eb9186fe 100644 --- a/c64/kernal/screen/screen_scroll_up.s +++ b/c64/kernal/screen/e8ea.screen_scroll_up.s @@ -1,43 +1,18 @@ // -// Scroll the whole screen up by 1 logical line +// Scroll the whole screen up by 1 logical line, described in: +// +// - [CM64] Computes Mapping the Commodore 64 - page 218 // screen_scroll_up: + // First handle CTRL and NO_SCRL keys -#if CONFIG_KEYBOARD_C128 || CONFIG_KEYBOARD_C65 + jsr screen_scroll_delay - // Do not scroll if NO_SCRL is pressed and interrupts are enabled -!: - php - pla - and #%00000010 - bne !+ // branch if IRQs disabled, we cannot detect NO_SCRL status - - lda SHFLAG - and #KEY_FLAG_NO_SCRL - bne !- -!: -#endif - - // Check if CTRL key pressed - if so, perform a delay - - lda SHFLAG - and #KEY_FLAG_CTRL - beq screen_scroll_up_delay_done - - ldy #$09 -!: - ldx #$FF - jsr wait_x_bars - dey - bne !- - -screen_scroll_up_delay_done: - - // First scroll the LDTBL (line link table) + // Scroll the LDTBL (line link table) ldy #$00 !: @@ -133,49 +108,8 @@ screen_scroll_up_loop_done: // If the first line is linked, scroll once more bit LDTBL+0 -#if CONFIG_KEYBOARD_C128 || CONFIG_KEYBOARD_C65 - bpl_far screen_scroll_up -#else bpl screen_scroll_up -#endif // Recalculate PNT and USER jmp screen_calculate_PNT_USER - - - - - - -/* YYY disabled for rework, add CTRL and NO_SCROLL support - -not_last_line: - rts - -screen_scroll_up_if_on_last_line: - - // Colour RAM is always in fixed place, so is easiest - // to use to check if we are on the last line. - // The last line is at $D800 + 24*40 = $DBC0 - lda USER+1 - cmp #>$DBC0 - bne not_last_line - - lda USER+0 - cmp #<$DBC0 - beq is_last_line - - jsr screen_get_current_line_logical_length - clc - adc USER+0 - cmp #<$DBE7-1 - bcc not_last_line - -is_last_line: - - dec TBLX - - // FALLTHROUGH to screen_scroll_up - -*/ \ No newline at end of file diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index 9a1caa8b..98f20304 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -7,33 +7,38 @@ screen_grow_logical_line_done: screen_grow_logical_line: - jmp screen_grow_logical_line // YYY + // Do not grow line if previus one is grown + + ldy TBLX + lda LDTBL,y + bpl screen_grow_logical_line_done + + // If last line, scroll the screen up + cpy #24 + bne !+ + jsr screen_scroll_up + ldy TBLX +!: + // Do not grow line if already grown + iny + lda LDTBL,y + bpl screen_grow_logical_line_done + + // Mark current line as grown + lda #$00 + sta LDTBL,y + + // Now we have to scroll lines downwards to make space + + + + .break + rts + /* YYY disabled for rework - // Do not grow line if it is already grown - ldy TBLX - lda LDTBL,y - bmi screen_grow_logical_line_done - - // Do not grow line if previous grown - dey - bmi !+ - lda LDTBL,y - bmi screen_grow_logical_line_done -!: - iny - - // Mark current line as grown - lda #$80 - sta LDTBL,y - - // Now make space for the extra line added. - // If we are on the last physical line of the screen, - // Then we need to scroll the screen up - jsr screen_scroll_up_if_on_last_line - // Count the number of physical lines to scroll down ldx #$01 ldy TBLX diff --git a/c64/kernal/screen/screen_scroll_delay.s b/c64/kernal/screen/screen_scroll_delay.s new file mode 100644 index 00000000..557b931e --- /dev/null +++ b/c64/kernal/screen/screen_scroll_delay.s @@ -0,0 +1,40 @@ + +// +// Handles CTRL and NO_SCRL during screen scroll +// + + +screen_scroll_delay: + +#if CONFIG_KEYBOARD_C128 || CONFIG_KEYBOARD_C65 + + // Do not scroll if NO_SCRL is pressed and interrupts are enabled +!: + php + pla + and #%00000010 + bne !+ // branch if IRQs disabled, we cannot detect NO_SCRL status + + lda SHFLAG + and #KEY_FLAG_NO_SCRL + bne !- +!: + +#endif + + // Check if CTRL key pressed - if so, perform a delay + + lda SHFLAG + and #KEY_FLAG_CTRL + beq screen_scroll_delay_done + + ldy #$09 +!: + ldx #$FF + jsr wait_x_bars + dey + bne !- + +screen_scroll_delay_done: + + rts From 309cfe3eb04f78d659f2415478bafec5a0d78966 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 5 Jan 2020 22:05:31 +0100 Subject: [PATCH 24/77] dead code removal --- c64/kernal/screen/clear_screen_real.s | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 c64/kernal/screen/clear_screen_real.s diff --git a/c64/kernal/screen/clear_screen_real.s b/c64/kernal/screen/clear_screen_real.s deleted file mode 100644 index eaad8592..00000000 --- a/c64/kernal/screen/clear_screen_real.s +++ /dev/null @@ -1,10 +0,0 @@ - -// -// Clear screen and initialise line link table, described in: -// -// - [CM64] Computes Mapping the Commodore 64 - pages 215-216 -// - - -clear_screen_real: - rts \ No newline at end of file From 27792a78ea2320a7807a1ae9e37dfbec933bf135 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Mon, 6 Jan 2020 09:47:13 +0100 Subject: [PATCH 25/77] separate functions for EAL/SAL preservation during screen routines --- c64/kernal/screen/e8ea.screen_scroll_up.s | 53 +++++++++++++------- c64/kernal/screen/screen_grow_logical_line.s | 18 ++++++- c64/kernal/screen/screen_preserve_sal_eal.s | 23 +++++++++ c64/kernal/screen/screen_restore_sal_eal.s | 18 +++++++ c64/kernal/screen/screen_scroll_delay.s | 40 --------------- 5 files changed, 92 insertions(+), 60 deletions(-) create mode 100644 c64/kernal/screen/screen_preserve_sal_eal.s create mode 100644 c64/kernal/screen/screen_restore_sal_eal.s delete mode 100644 c64/kernal/screen/screen_scroll_delay.s diff --git a/c64/kernal/screen/e8ea.screen_scroll_up.s b/c64/kernal/screen/e8ea.screen_scroll_up.s index eb9186fe..52939e08 100644 --- a/c64/kernal/screen/e8ea.screen_scroll_up.s +++ b/c64/kernal/screen/e8ea.screen_scroll_up.s @@ -10,7 +10,38 @@ screen_scroll_up: // First handle CTRL and NO_SCRL keys - jsr screen_scroll_delay +#if CONFIG_KEYBOARD_C128 || CONFIG_KEYBOARD_C65 + + // Do not scroll if NO_SCRL is pressed and interrupts are enabled +!: + php + pla + and #%00000010 + bne !+ // branch if IRQs disabled, we cannot detect NO_SCRL status + + lda SHFLAG + and #KEY_FLAG_NO_SCRL + bne !- +!: + +#endif + + // Check if CTRL key pressed - if so, perform a delay + + lda SHFLAG + and #KEY_FLAG_CTRL + beq screen_scroll_up_delay_done + + ldy #$09 +!: + ldx #$FF + jsr wait_x_bars + dey + bne !- + + // FALLTROUGH + +screen_scroll_up_delay_done: // Scroll the LDTBL (line link table) @@ -27,14 +58,7 @@ screen_scroll_up: // Preserve SAL and EAL - lda SAL+0 - pha - lda SAL+1 - pha - lda EAL+0 - pha - lda EAL+1 - pha + jsr screen_preserve_sal_eal // Now, we need to scroll both screen memory and color memory; first create start/end pointers @@ -86,15 +110,8 @@ screen_scroll_up_loop: screen_scroll_up_loop_done: // Restore SAL and EAL - - pla - sta EAL+1 - pla - sta EAL+0 - pla - sta SAL+1 - pla - sta SAL+0 + + jsr screen_restore_sal_eal // Clear the newly introduced line diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index 98f20304..65be75ce 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -8,7 +8,6 @@ screen_grow_logical_line_done: screen_grow_logical_line: // Do not grow line if previus one is grown - ldy TBLX lda LDTBL,y bpl screen_grow_logical_line_done @@ -28,12 +27,27 @@ screen_grow_logical_line: lda #$00 sta LDTBL,y + // Preserve SAL and EAL + jsr screen_preserve_sal_eal + // Now we have to scroll lines downwards to make space + // YYY implement here .break - rts + + + + + + + + // Restore SAL and EAL + jsr screen_restore_sal_eal + + // Recalculate PNT and USER YYY is it needed? + jmp screen_calculate_PNT_USER diff --git a/c64/kernal/screen/screen_preserve_sal_eal.s b/c64/kernal/screen/screen_preserve_sal_eal.s new file mode 100644 index 00000000..df92288f --- /dev/null +++ b/c64/kernal/screen/screen_preserve_sal_eal.s @@ -0,0 +1,23 @@ + + +screen_preserve_sal_eal: + + plx_trash_a + ply_trash_a + + lda SAL+0 + pha + lda SAL+1 + pha + lda EAL+0 + pha + lda EAL+1 + pha + + // FALLTROUGH + +screen_common_sal_eal: + + phy_trash_a + phx_trash_a + rts diff --git a/c64/kernal/screen/screen_restore_sal_eal.s b/c64/kernal/screen/screen_restore_sal_eal.s new file mode 100644 index 00000000..b2d95a52 --- /dev/null +++ b/c64/kernal/screen/screen_restore_sal_eal.s @@ -0,0 +1,18 @@ + + +screen_restore_sal_eal: + + plx_trash_a + ply_trash_a + + pla + sta EAL+1 + pla + sta EAL+0 + pla + sta SAL+1 + pla + sta SAL+0 + + jmp screen_common_sal_eal + \ No newline at end of file diff --git a/c64/kernal/screen/screen_scroll_delay.s b/c64/kernal/screen/screen_scroll_delay.s deleted file mode 100644 index 557b931e..00000000 --- a/c64/kernal/screen/screen_scroll_delay.s +++ /dev/null @@ -1,40 +0,0 @@ - -// -// Handles CTRL and NO_SCRL during screen scroll -// - - -screen_scroll_delay: - -#if CONFIG_KEYBOARD_C128 || CONFIG_KEYBOARD_C65 - - // Do not scroll if NO_SCRL is pressed and interrupts are enabled -!: - php - pla - and #%00000010 - bne !+ // branch if IRQs disabled, we cannot detect NO_SCRL status - - lda SHFLAG - and #KEY_FLAG_NO_SCRL - bne !- -!: - -#endif - - // Check if CTRL key pressed - if so, perform a delay - - lda SHFLAG - and #KEY_FLAG_CTRL - beq screen_scroll_delay_done - - ldy #$09 -!: - ldx #$FF - jsr wait_x_bars - dey - bne !- - -screen_scroll_delay_done: - - rts From dfc6c5f90afcc85dcf2fccd9f77c4de89e521021 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Mon, 6 Jan 2020 11:03:12 +0100 Subject: [PATCH 26/77] logical line growth adaptation --- c64/kernal/screen/e8ea.screen_scroll_up.s | 4 +- c64/kernal/screen/screen_grow_logical_line.s | 207 +++++++------------ 2 files changed, 73 insertions(+), 138 deletions(-) diff --git a/c64/kernal/screen/e8ea.screen_scroll_up.s b/c64/kernal/screen/e8ea.screen_scroll_up.s index 52939e08..2db650c4 100644 --- a/c64/kernal/screen/e8ea.screen_scroll_up.s +++ b/c64/kernal/screen/e8ea.screen_scroll_up.s @@ -56,12 +56,10 @@ screen_scroll_up_delay_done: lda #$80 sta LDTBL+24 - // Preserve SAL and EAL + // Preserve SAL and EAL, prepare initial SAL/EAL/PNT/USER values jsr screen_preserve_sal_eal - // Now, we need to scroll both screen memory and color memory; first create start/end pointers - lda HIBASE sta SAL+1 sta EAL+1 diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index 65be75ce..ef66c287 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -1,8 +1,16 @@ -screen_grow_logical_line_done: - rts +screen_grow_logical_line_screen_up: + + jsr screen_scroll_up + + // FALLTROUGH + +screen_grow_logical_line_already_done: + + inc TBLX + jmp screen_calculate_PNT_USER screen_grow_logical_line: @@ -14,10 +22,8 @@ screen_grow_logical_line: // If last line, scroll the screen up cpy #24 - bne !+ - jsr screen_scroll_up - ldy TBLX -!: + beq screen_grow_logical_line_screen_up + // Do not grow line if already grown iny lda LDTBL,y @@ -27,158 +33,89 @@ screen_grow_logical_line: lda #$00 sta LDTBL,y + // Now we have to scroll lines downwards to make space. We start from the end, + // and work backwards. We cannot be as simple and efficient here as we are + // for scrolling up, because we do not know how much must be scrolled. + // Preserve SAL and EAL + jsr screen_preserve_sal_eal - // Now we have to scroll lines downwards to make space + // Work out how many physical lines to scroll down + lda #23 + sec + sbc TBLX + beq screen_grow_logical_line_copy_done // branch if no need to copyy + tax - // YYY implement here + // Prepare initial SAL/EAL/PNT/USER values - .break - - - - - - - - // Restore SAL and EAL - jsr screen_restore_sal_eal - - // Recalculate PNT and USER YYY is it needed? - jmp screen_calculate_PNT_USER - - - -/* YYY disabled for rework - - // Count the number of physical lines to scroll down - ldx #$01 - ldy TBLX -!: - iny - cpy #23 - bcs !+ - - lda LDTBL,y - bmi !- - inx - bne !- // branch always -!: - cpx #$00 - beq no_copy_down - - // Scroll screen down to make space - // As we are scrolling down, we start from the end, - // and work backwards. We can't be as simple and efficient - // here as we are for scrolling up, because we don't know - // how much must be scrolled. - // Simple solution is to work out how many physical lines - // need shifting down, and then move lines at a time after - // initialising the pointers to the end area of the screen. - - // Preserve EAL - lda EAL+0 - pha - lda EAL+1 - pha - - // XXX fix TBLX value, it seems to show logical line number, which is wrong! - - // Set pointers to end of screen line, and one line - // above. (It is always one physical line, because - // this can only happen when expanding a line from 40 to - // 80 characters). - // XXX - This is not very efficient, and longer than it - // needs to be. Better would be to work out size to - // copy, and count it down in a pointer somewhere, so - // that loop iteration logic is simpler. lda HIBASE clc adc #3 - sta PNT+1 sta SAL+1 - lda #>$DBC0 sta EAL+1 + + lda #>$DB00 // 3rd page of the color memory + sta PNT+1 sta USER+1 - lda #<$03C0 - sta PNT+0 + lda #<$03C0 // start of destination row + sta EAL+0 sta USER+0 - // souce address is line above + lda #<$03C0 // start of source row + sta SAL+0 + sta PNT+0 + +screen_grow_logical_line_loop: + + // Scroll down one line each loop iteration + + ldy #39 +!: + lda (SAL), y + sta (EAL), y + lda (PNT), y + sta (USER), y + dey + bpl !- + + // Decrement SAL/PNT pointers by 40 (optimized due to fact they share LSB) + + lda SAL+0 sec sbc #40 sta SAL+0 - sta EAL+0 + sta PNT+0 + bcs !+ + dec SAL+1 + dec PNT+1 +!: + // Decrement EAL/USER pointers by 40 (optimized due to fact they share LSB) -copy_line_down_loop: - ldy #39 -cl_inner: - lda (EAL),y - sta (USER),y - lda (SAL),y - sta (PNT),y - dey - bpl cl_inner - - // This ugly hack prevents cursor blink interference XXX solve this in better way - php - sei - jsr cursor_hide_if_visible - plp - - // Decrement all pointers by 40 - // Low bytes are in common pairs - - // Old source is new destination - // Use different registers to minimise byte similarity with C64 KERNAl - ldy SAL+1 - sty PNT+1 - lda EAL+1 - ldy SAL+0 - sta USER+1 - sty PNT+0 - sty USER+0 - - // Decrementing source pointers - lda SAL+0 + lda EAL+0 sec - sbc #<40 - sta SAL+0 + sbc #40 sta EAL+0 - lda SAL+1 - sbc #>40 - sta SAL+1 - // convert to screen equivalent - sec - sbc HIBASE - clc - adc #>$D800 - sta EAL+1 + sta USER+0 + bcs !+ + dec EAL+1 + dec USER+1 +!: + // Next loop iteration dex - bne copy_line_down_loop + bne screen_grow_logical_line_loop - // Restore EAL - pla - sta EAL+1 - pla - sta EAL+0 +screen_grow_logical_line_copy_done: -no_copy_down: - jsr screen_calculate_line_pointer + // Restore SAL and EAL - // Erase newly inserted line - ldy #79 -!: - lda COLOR - sta (USER),y - lda #$20 - sta (PNT),y - dey - cpy #39 - bne !- + jsr screen_restore_sal_eal - rts -*/ + // Erase newly inserted line and quit + + ldx TBLX + inx + jmp screen_clear_line From f642b55383281a19902412c65b6c9a4624066934 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Mon, 6 Jan 2020 12:05:39 +0100 Subject: [PATCH 27/77] cursor up/down adapted --- c64/kernal/screen/chrout_screen.s | 1 + c64/kernal/screen/chrout_screen_crsr.s | 49 +++++++++----------- c64/kernal/screen/e8ea.screen_scroll_up.s | 2 +- c64/kernal/screen/screen_fix_pntr.s | 30 ++++++++++++ c64/kernal/screen/screen_grow_logical_line.s | 3 +- 5 files changed, 57 insertions(+), 28 deletions(-) create mode 100644 c64/kernal/screen/screen_fix_pntr.s diff --git a/c64/kernal/screen/chrout_screen.s b/c64/kernal/screen/chrout_screen.s index 328cc0ba..c70d51bf 100644 --- a/c64/kernal/screen/chrout_screen.s +++ b/c64/kernal/screen/chrout_screen.s @@ -119,6 +119,7 @@ chrout_screen_literal: chrout_screen_calc_lptr_done: jsr screen_calculate_PNT_USER + jsr screen_fix_PNTR // FALLTROUGH diff --git a/c64/kernal/screen/chrout_screen_crsr.s b/c64/kernal/screen/chrout_screen_crsr.s index 1eb85249..9946e43d 100644 --- a/c64/kernal/screen/chrout_screen_crsr.s +++ b/c64/kernal/screen/chrout_screen_crsr.s @@ -5,37 +5,34 @@ chrout_screen_CRSR_UP: - jmp chrout_screen_done + + lda TBLX + beq !+ + dec TBLX +!: + jmp chrout_screen_calc_lptr_done + + chrout_screen_CRSR_DOWN: - jmp chrout_screen_done + + lda TBLX + cmp #24 + bne !+ + + jsr screen_scroll_up_delay_done +!: + inc TBLX + jmp chrout_screen_calc_lptr_done + + + + chrout_screen_CRSR_LEFT: - jmp chrout_screen_done + jmp chrout_screen_calc_lptr_done chrout_screen_CRSR_RIGHT: - jmp chrout_screen_done + jmp chrout_screen_calc_lptr_done /* YYY disabled for rework -chrout_screen_CRSR_UP: - - lda PNTR - sec - sbc #40 - sta PNTR - jmp chrout_screen_calc_lptr_done - - -chrout_screen_CRSR_DOWN: - - lda PNTR - clc - adc #40 - sta PNTR - // We need to advance the pointer manually, as normalising - // now will break things. The pointer update is required - // so that we can tell if we really are on the bottom phys - // screen line or not - jsr screen_scroll_up_if_on_last_line - jmp chrout_screen_calc_lptr_done - chrout_screen_CRSR_LEFT: diff --git a/c64/kernal/screen/e8ea.screen_scroll_up.s b/c64/kernal/screen/e8ea.screen_scroll_up.s index 2db650c4..af216001 100644 --- a/c64/kernal/screen/e8ea.screen_scroll_up.s +++ b/c64/kernal/screen/e8ea.screen_scroll_up.s @@ -41,7 +41,7 @@ screen_scroll_up: // FALLTROUGH -screen_scroll_up_delay_done: +screen_scroll_up_delay_done: // entry point for cursor move control codes // Scroll the LDTBL (line link table) diff --git a/c64/kernal/screen/screen_fix_pntr.s b/c64/kernal/screen/screen_fix_pntr.s new file mode 100644 index 00000000..7d256caa --- /dev/null +++ b/c64/kernal/screen/screen_fix_pntr.s @@ -0,0 +1,30 @@ + +// +// Sets PNTR in a proper range (0-39 or 40-79) depending on the +// + + +screen_fix_PNTR: + + ldy TBLX + lda LDTBL, y + php + jsr screen_get_clipped_PNTR + plp + bmi screen_fix_PNTR_0_39 + + // FALLTROUGH + +screen_fix_PNTR_40_79: + + tya + clc + adc #40 + tay + + // FALLTROUGH + +screen_fix_PNTR_0_39: + + sty PNTR + rts diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index ef66c287..0f930bd9 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -1,4 +1,5 @@ +// YYY test all the cases! screen_grow_logical_line_screen_up: @@ -7,7 +8,7 @@ screen_grow_logical_line_screen_up: // FALLTROUGH -screen_grow_logical_line_already_done: +screen_grow_logical_line_done: inc TBLX jmp screen_calculate_PNT_USER From b03aa78f54479b865ad546c2e14a6f10ec352d97 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Mon, 6 Jan 2020 12:28:26 +0100 Subject: [PATCH 28/77] adapted remaining cursor move routines --- c64/kernal/screen/chrout_screen_crsr.s | 49 ++++++++++--------- .../screen/screen_advance_to_next_line.s | 10 +--- 2 files changed, 28 insertions(+), 31 deletions(-) diff --git a/c64/kernal/screen/chrout_screen_crsr.s b/c64/kernal/screen/chrout_screen_crsr.s index 9946e43d..fbf575aa 100644 --- a/c64/kernal/screen/chrout_screen_crsr.s +++ b/c64/kernal/screen/chrout_screen_crsr.s @@ -3,13 +3,19 @@ // Cursor keys handling within CHROUT // +// YYY bug: after line growth cursor LEFT/RIGHT jumps to previous line!!! + chrout_screen_CRSR_UP: lda TBLX - beq !+ + beq chrout_screen_CRSR_done dec TBLX -!: + + // FALLTROUGH + +chrout_screen_CRSR_done: + jmp chrout_screen_calc_lptr_done @@ -18,35 +24,34 @@ chrout_screen_CRSR_DOWN: lda TBLX cmp #24 bne !+ - - jsr screen_scroll_up_delay_done + jsr screen_scroll_up !: inc TBLX jmp chrout_screen_calc_lptr_done - - -chrout_screen_CRSR_LEFT: - jmp chrout_screen_calc_lptr_done chrout_screen_CRSR_RIGHT: - jmp chrout_screen_calc_lptr_done -/* YYY disabled for rework + jsr screen_get_clipped_PNTR + cpy #39 + beq_far screen_advance_to_next_line + + iny +!: + sty PNTR + bpl chrout_screen_CRSR_done // branch always + chrout_screen_CRSR_LEFT: + jsr screen_get_clipped_PNTR + dey + bpl !- + lda TBLX - ora PNTR - beq !+ // top-left corner, recalculating pointer is not necessary, but this is a very rare case nevertheless - dec PNTR -!: - jmp chrout_screen_calc_lptr_done + beq chrout_screen_CRSR_done - -chrout_screen_CRSR_RIGHT: - - inc PNTR - jmp chrout_screen_calc_lptr_done - -*/ + dec TBLX + lda #39 + sta PNTR + bne chrout_screen_CRSR_done // branch always diff --git a/c64/kernal/screen/screen_advance_to_next_line.s b/c64/kernal/screen/screen_advance_to_next_line.s index 15a56d60..e83be7b4 100644 --- a/c64/kernal/screen/screen_advance_to_next_line.s +++ b/c64/kernal/screen/screen_advance_to_next_line.s @@ -12,15 +12,7 @@ screen_advance_to_next_line: !: inc TBLX - // Set PNTR to 0 or 40 (for continued line) - ldy TBLX - lda LDTBL, y - and #$80 - bne !+ - - lda #40 - skip_2_bytes_trash_nvz -!: + // Set PNTR to 0 (for continued line will be fixed later) lda #$00 sta PNTR From 47090a52fd244efe101f019793f74bf52b413efe Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Tue, 7 Jan 2020 18:52:11 +0100 Subject: [PATCH 29/77] work on character inserting --- STATUS.md | 2 +- c64/kernal/keyboard/chrin_keyboard.s | 3 +- c64/kernal/screen/chrout_screen_del.s | 11 ++- c64/kernal/screen/chrout_screen_ins.s | 46 +++++------ .../screen/screen_check_space_ends_line.s | 8 ++ .../screen_get_current_line_logical_length.s | 17 ---- .../screen/screen_get_logical_line_end_ptr.s | 26 ++++++ c64/kernal/screen/screen_grow_logical_line.s | 2 +- c64/kernal/screen/screen_normalize_xy.s | 79 ------------------- 9 files changed, 63 insertions(+), 131 deletions(-) create mode 100644 c64/kernal/screen/screen_check_space_ends_line.s delete mode 100644 c64/kernal/screen/screen_get_current_line_logical_length.s create mode 100644 c64/kernal/screen/screen_get_logical_line_end_ptr.s delete mode 100644 c64/kernal/screen/screen_normalize_xy.s diff --git a/STATUS.md b/STATUS.md index f3574c3c..8ad2dd17 100644 --- a/STATUS.md +++ b/STATUS.md @@ -4,7 +4,7 @@ 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 +* 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 diff --git a/c64/kernal/keyboard/chrin_keyboard.s b/c64/kernal/keyboard/chrin_keyboard.s index 40966536..77403a84 100644 --- a/c64/kernal/keyboard/chrin_keyboard.s +++ b/c64/kernal/keyboard/chrin_keyboard.s @@ -90,8 +90,7 @@ chrin_enter: sta LXSP+1 // Calculate length - jsr screen_get_current_line_logical_length - tay + jsr screen_get_logical_line_end_ptr iny !: dey bmi empty_line diff --git a/c64/kernal/screen/chrout_screen_del.s b/c64/kernal/screen/chrout_screen_del.s index 0a5521f8..c79d9b3a 100644 --- a/c64/kernal/screen/chrout_screen_del.s +++ b/c64/kernal/screen/chrout_screen_del.s @@ -3,10 +3,7 @@ // CHROUT routine - screen support, DEL key handling // -chrout_screen_DEL: - jmp chrout_screen_done -/* YYY disabled for rework chrout_screen_DEL: // In insert mode it embeds control character @@ -14,6 +11,14 @@ chrout_screen_DEL: beq !+ jmp chrout_screen_quote !: + + + + jmp chrout_screen_done + +/* YYY disabled for rework +chrout_screen_DEL: + ldx PNTR bne chrout_screen_del_column_non_0 diff --git a/c64/kernal/screen/chrout_screen_ins.s b/c64/kernal/screen/chrout_screen_ins.s index 311637f3..20d99a06 100644 --- a/c64/kernal/screen/chrout_screen_ins.s +++ b/c64/kernal/screen/chrout_screen_ins.s @@ -3,39 +3,30 @@ // CHROUT routine - screen support, INS key handling // -chrout_screen_INS: - jmp chrout_screen_done -/* YYY disabled for rework +// YYY does not work properly on growing logical line +// YYY implement LNMX + + chrout_screen_INS: - // Insert (shift-DELETE) + // First check if last character of the line is space - // Abort if line already max length, ie 79th char is not a space - jsr screen_get_current_line_logical_length - cmp #79 - bne !+ - tay - lda (PNT),y - cmp #$20 - beq !+ + jsr screen_check_space_ends_line + beq chrout_screen_ins_possible - // Line is too long to extend - jmp chrout_screen_done - -!: - // Work out if line needs to be expanded, and if so expand it - ldy #39 - lda (PNT),y - cmp #$20 - beq !+ + // Not space, try to grow logical line and check once again jsr screen_grow_logical_line + jsr screen_check_space_ends_line + bne_far chrout_screen_done -!: - // Shuffle chars towards end of line - jsr screen_get_current_line_logical_length - tay + // FALLTROUGH + +chrout_screen_ins_possible: + + // Move chars towards end of the line + jsr screen_get_logical_line_end_ptr !: // Note: While the following routine is obvious to any skilled // in the art as the most obvious simple and efficient solution, @@ -43,7 +34,7 @@ chrout_screen_INS: // in a relatively long verbatim stretch of bytes when compared to // the C64 KERNAL. Thus we have swapped the order, just to reduce // the potential for any argument of copyright infringement, even - // though we really don't believe that the routine can be copyrighted + // though we really do not believe that the routine can be copyrighted // due to the lack of creativity. dey lda (USER),y @@ -63,7 +54,6 @@ chrout_screen_INS: // Put space in the inserted gap lda #$20 - sta (PNT),y + sta (PNT), y jmp chrout_screen_done -*/ \ No newline at end of file diff --git a/c64/kernal/screen/screen_check_space_ends_line.s b/c64/kernal/screen/screen_check_space_ends_line.s new file mode 100644 index 00000000..245ced8d --- /dev/null +++ b/c64/kernal/screen/screen_check_space_ends_line.s @@ -0,0 +1,8 @@ + +screen_check_space_ends_line: + + jsr screen_get_logical_line_end_ptr + lda (PNT), y + cmp #$20 + + rts diff --git a/c64/kernal/screen/screen_get_current_line_logical_length.s b/c64/kernal/screen/screen_get_current_line_logical_length.s deleted file mode 100644 index e81640fe..00000000 --- a/c64/kernal/screen/screen_get_current_line_logical_length.s +++ /dev/null @@ -1,17 +0,0 @@ - -screen_get_current_line_logical_length: - rts - -/* YYY disabled for rework - -screen_get_current_line_logical_length: - ldy TBLX - lda LDTBL,y - bpl !+ - lda #79 - .byte $2c // BIT absolute mode, which we use to skip the next two instruction bytes -!: - lda #39 - sta LNMX - rts -*/ \ No newline at end of file diff --git a/c64/kernal/screen/screen_get_logical_line_end_ptr.s b/c64/kernal/screen/screen_get_logical_line_end_ptr.s new file mode 100644 index 00000000..c6949170 --- /dev/null +++ b/c64/kernal/screen/screen_get_logical_line_end_ptr.s @@ -0,0 +1,26 @@ + + +screen_get_logical_line_end_ptr: + + ldy TBLX + cpy #24 + bcs screen_get_logical_line_end_39 // last line of the screen + + lda LDTBL, y + bpl screen_get_logical_line_end_39 // current line continues previous one + + iny + lda LDTBL, y + bmi screen_get_logical_line_end_39 // current line is not continued + + // FALLTROUGH + +screen_get_logical_line_end_79: + + ldy #79 + rts + +screen_get_logical_line_end_39: + + ldy #39 + rts \ No newline at end of file diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index 0f930bd9..096e6bdd 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -1,5 +1,5 @@ -// YYY test all the cases! +// YYY test all the cases, does not work correctly yet! screen_grow_logical_line_screen_up: diff --git a/c64/kernal/screen/screen_normalize_xy.s b/c64/kernal/screen/screen_normalize_xy.s deleted file mode 100644 index 90486ed3..00000000 --- a/c64/kernal/screen/screen_normalize_xy.s +++ /dev/null @@ -1,79 +0,0 @@ - -// -// Normalise X and Y values -// If X < 0, then make X = X + 40 (or 80, if previous line is linked) -// - -/* YYY disabled for rework - -screen_normalize_xy: - - lda PNTR - bpl x_not_negative - dec TBLX - // Check that we didn't go backwards off the top of the screen - bpl !+ - lda #0 - sta TBLX - -!: jsr screen_add_40_to_PNTR - - // Check if line is linked, if so, add 40 again - ldy TBLX - lda LDTBL,y - bpl !+ - jsr screen_add_40_to_PNTR -!: - -x_not_negative: - // Work out if X is too big - ldy TBLX - lda LDTBL,y - bpl !+ - lda #79 - skip_2_bytes_trash_nvz -!: lda #39 - cmp PNTR - bcs x_not_too_big - - // X value is too big, so subtract 40 and increment Y - lda PNTR - sec - sbc #40 - sta PNTR - inc TBLX - -x_not_too_big: - - // Make sure Y isn't negative - lda TBLX - bpl !+ - lda #0 - sta TBLX -!: - // Make sure Y isn't too large for absolute size of - // screen - cmp #24 - bcc !+ - lda #24 - sta TBLX -!: - // Make sure Y isn't too much for the screen, taking - // into account the line link table - ldy #24 // max allowable line - ldx #0 -link_count_loop: - lda LDTBL,x - bpl !+ - dey -!: inx - cpx #25 - bne link_count_loop - tya - cmp TBLX - bcs y_ok - sta TBLX -y_ok: - rts - -*/ \ No newline at end of file From 49f46866ae27289220130ad6c27ae16466186062 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Tue, 7 Jan 2020 20:19:16 +0100 Subject: [PATCH 30/77] fix TBLX bug after logical line grow during character output --- c64/kernal/screen/chrout_screen.s | 1 + 1 file changed, 1 insertion(+) diff --git a/c64/kernal/screen/chrout_screen.s b/c64/kernal/screen/chrout_screen.s index c70d51bf..dc5532b8 100644 --- a/c64/kernal/screen/chrout_screen.s +++ b/c64/kernal/screen/chrout_screen.s @@ -105,6 +105,7 @@ chrout_screen_literal: cpy #40 bne !+ jsr screen_grow_logical_line + inc TBLX ldy PNTR !: // If not the 80th character of the logical row, we are done From c44120ee96dc6733fcbe16ab62972c6f874094f6 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Tue, 7 Jan 2020 20:28:13 +0100 Subject: [PATCH 31/77] address fix in logical line growth --- c64/kernal/screen/screen_add_40_to_pntr.s | 12 ------------ c64/kernal/screen/screen_grow_logical_line.s | 4 ++-- 2 files changed, 2 insertions(+), 14 deletions(-) delete mode 100644 c64/kernal/screen/screen_add_40_to_pntr.s diff --git a/c64/kernal/screen/screen_add_40_to_pntr.s b/c64/kernal/screen/screen_add_40_to_pntr.s deleted file mode 100644 index 7e4b2c46..00000000 --- a/c64/kernal/screen/screen_add_40_to_pntr.s +++ /dev/null @@ -1,12 +0,0 @@ - -/* YYY disabled - most likely not needed - -screen_add_40_to_PNTR: - - lda PNTR - clc - adc #40 - sta PNTR - - rts -*/ \ No newline at end of file diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index 096e6bdd..bc5e6256 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -1,5 +1,5 @@ -// YYY test all the cases, does not work correctly yet! +// YYY test all the cases screen_grow_logical_line_screen_up: @@ -65,7 +65,7 @@ screen_grow_logical_line: lda #<$03C0 // start of destination row sta EAL+0 sta USER+0 - lda #<$03C0 // start of source row + lda #<$0398 // start of source row sta SAL+0 sta PNT+0 From 98e7e633e86a50fd0a6be532ac0f02d82ff23cff Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 8 Jan 2020 18:01:06 +0100 Subject: [PATCH 32/77] reenabled tab, some work towards char delete --- c64/basic/init/initmsg_real.s | 8 ++-- c64/kernal/keyboard/chrin_keyboard.s | 32 +++++++++++--- c64/kernal/screen/chrout_screen.s | 2 + c64/kernal/screen/chrout_screen_del.s | 45 +++++++++++--------- c64/kernal/screen/chrout_screen_tab.s | 30 +++++++------ c64/kernal/screen/screen_grow_logical_line.s | 2 +- 6 files changed, 74 insertions(+), 45 deletions(-) diff --git a/c64/basic/init/initmsg_real.s b/c64/basic/init/initmsg_real.s index 923b74a6..8a9d3924 100644 --- a/c64/basic/init/initmsg_real.s +++ b/c64/basic/init/initmsg_real.s @@ -118,7 +118,7 @@ initmsg_real: ldy #>startup_banner jsr STROUT - ldx #$04 + ldx #$05 ldy #$00 jsr plot_set @@ -126,20 +126,20 @@ initmsg_real: ldy #>rom_revision_basic_string jsr STROUT - ldx #$04 + ldx #$05 ldy #$12 jsr plot_set jsr initmsg_bytes_free #if CONFIG_SHOW_FEATURES - ldx #$05 + ldx #$08 ldy #$00 jsr plot_set jsr print_features jmp print_return #else - ldx #$05 + ldx #$08 ldy #$00 jmp plot_set #endif diff --git a/c64/kernal/keyboard/chrin_keyboard.s b/c64/kernal/keyboard/chrin_keyboard.s index 77403a84..e50ee425 100644 --- a/c64/kernal/keyboard/chrin_keyboard.s +++ b/c64/kernal/keyboard/chrin_keyboard.s @@ -35,7 +35,7 @@ chrin_repeat: empty_line: // For an empty line, just return the carriage return - // (and don't forget to actually print the carriage return, so that + // (and do not forget to actually print the carriage return, so that // the cursor advances and screen scrolls as required) ply_trash_a @@ -72,7 +72,7 @@ read_from_keyboard: cmp #$0D bne not_enter -chrin_enter: +chrin_enter: // YYY test this! jsr cursor_disable jsr pop_keyboard_buffer @@ -81,7 +81,7 @@ chrin_enter: // It was enter. // Note that we have a line of input to return, and return the first byte thereof // after computing and storing its length. - // (Compute's Mapping the 64, p96) + // (Computes Mapping the 64, p96) // Set pointer to line of input lda PNT+0 @@ -89,14 +89,34 @@ chrin_enter: lda PNT+1 sta LXSP+1 + // If the current line is a continuation of the previous one, decrease LXSP by 40 + ldy TBLX + lda LDTBL, y + bmi chrin_enter_calc_length // branch if not continuation + lda LXSP+0 + sec + sbc #40 + sta LXSP+0 + bcs !+ + dec LXSP+1 +!: + ldy #80 + bne chrin_enter_loop // branch always + +chrin_enter_calc_length: + // Calculate length jsr screen_get_logical_line_end_ptr iny -!: dey + +chrin_enter_loop: + + // Retrieve bytes + dey bmi empty_line - lda (PNT),y + lda (LXSP),y cmp #$20 - beq !- + beq chrin_enter_loop iny sty INDX lda #$01 diff --git a/c64/kernal/screen/chrout_screen.s b/c64/kernal/screen/chrout_screen.s index dc5532b8..15323dd9 100644 --- a/c64/kernal/screen/chrout_screen.s +++ b/c64/kernal/screen/chrout_screen.s @@ -126,5 +126,7 @@ chrout_screen_calc_lptr_done: chrout_screen_done: + // YYY should we update character under cursor here? or in cursor_show_if_enabled? + jsr cursor_show_if_enabled jmp chrout_done_success diff --git a/c64/kernal/screen/chrout_screen_del.s b/c64/kernal/screen/chrout_screen_del.s index c79d9b3a..6ca9c4f0 100644 --- a/c64/kernal/screen/chrout_screen_del.s +++ b/c64/kernal/screen/chrout_screen_del.s @@ -11,15 +11,9 @@ chrout_screen_DEL: beq !+ jmp chrout_screen_quote !: - - - - jmp chrout_screen_done - -/* YYY disabled for rework -chrout_screen_DEL: - - ldx PNTR + // ldx PNTR + jsr screen_get_clipped_PNTR + cpy #$00 bne chrout_screen_del_column_non_0 // FALLTROUGH @@ -27,22 +21,32 @@ chrout_screen_DEL: chrout_screen_del_column_0: ldy TBLX - beq chrout_screen_del_done // delete from row 0, col 0 does nothing - - // Column 0 delete just moves us to the end of the - // previous line, without actually deleting anything + beq chrout_screen_del_done // delete from row 0, col 0 does nothing + // Move cursor to end of previous line dec TBLX - jsr screen_get_current_line_logical_length - lda LNMX + lda #39 sta PNTR + + // Update PNT and USER pointers + jsr screen_calculate_PNT_USER + // Put space character at the current cursor position + ldy #39 + lda #$20 + sta (PNT),y + + // XXX should we clear the color too? + + // Finish with recalculating all the variables jmp chrout_screen_calc_lptr_done chrout_screen_del_column_non_0: - // Copy rest of line down - jsr screen_get_current_line_logical_length +/* YYY disabled for rework + + // Copy rest of logical line back + jsr screen_get_logical_line_end_ptr ldy PNTR cpy LNMX beq !++ @@ -70,7 +74,8 @@ chrout_screen_del_column_non_0: // FALLTROUGH -chrout_screen_del_done: - jmp chrout_screen_done +*/ -*/ \ No newline at end of file +chrout_screen_del_done: + + jmp chrout_screen_done diff --git a/c64/kernal/screen/chrout_screen_tab.s b/c64/kernal/screen/chrout_screen_tab.s index 80178e56..59c3816a 100644 --- a/c64/kernal/screen/chrout_screen_tab.s +++ b/c64/kernal/screen/chrout_screen_tab.s @@ -6,33 +6,35 @@ #if CONFIG_EDIT_TABULATORS -chrout_screen_TAB_FW: - jmp chrout_screen_done -chrout_screen_TAB_BW: - jmp chrout_screen_done -/* YYY disabled for rework chrout_screen_TAB_FW: - lda PNTR + jsr screen_get_clipped_PNTR + tya ora #%00000111 - sta PNTR - inc PNTR + tay + iny + cpy #40 + bcc !+ + ldy #39 +!: + sty PNTR + jmp chrout_screen_calc_lptr_done chrout_screen_TAB_BW: - lda TBLX - ora PNTR - beq !+ // top-left corner, recalculating pointer is not necessary, but this is a very rare case nevertheless + jsr screen_get_clipped_PNTR + cpy #$00 // YYY maybe it's worth to put this inside screen_get_clipped_PNTR? + beq !+ // column 0, recalculating pointers is not necessary, but this is a rare case nevertheless - dec PNTR - lda PNTR + dey + tya and #%11111000 sta PNTR !: - jmp chrout_screen_calc_lptr_done */ + jmp chrout_screen_calc_lptr_done #endif // CONFIG_EDIT_TABULATORS diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index bc5e6256..7e2627cc 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -1,5 +1,4 @@ -// YYY test all the cases screen_grow_logical_line_screen_up: @@ -72,6 +71,7 @@ screen_grow_logical_line: screen_grow_logical_line_loop: // Scroll down one line each loop iteration + // YYY add LDTBL scrolling ldy #39 !: From b498d4010b9793a6a28f5aa998b1bc84a28b85fb Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 8 Jan 2020 18:36:46 +0100 Subject: [PATCH 33/77] initial LNMX calculation routine --- STATUS.md | 57 ++++++++++--------- c64/aliases/,aliases_ram_lowmem.s | 2 +- c64/kernal/screen/chrout_screen.s | 5 +- c64/kernal/screen/screen_calculate_lnmx.s | 36 ++++++++++++ ...een_fix_pntr.s => screen_calculate_pntr.s} | 8 +-- 5 files changed, 73 insertions(+), 35 deletions(-) create mode 100644 c64/kernal/screen/screen_calculate_lnmx.s rename c64/kernal/screen/{screen_fix_pntr.s => screen_calculate_pntr.s} (65%) diff --git a/STATUS.md b/STATUS.md index 8ad2dd17..15adec12 100644 --- a/STATUS.md +++ b/STATUS.md @@ -48,28 +48,29 @@ 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 | +| 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 | PARTIAL | 80 chars in logical line support is very buggy | -| VDC 80 col. | NOT DONE | | +| Driver | Status | Remarks | +| :----------------: | :------: | :------------------------------------------------: | +| VIC-II | PARTIAL | rework in progress | +| 80 columns, VDC | NOT DONE | | +| 80 columns, Mega65 | NOT DONE | | ## Tape port (LOAD only!) * Tapuino * Datasette -| Driver | Status | Remarks | -| :-----------: | :------: | :------------------------------------------------: | -| normal | PARTIAL | no error correction, no tape speed calibratrion | -| turbo | PARTIAL | up to 250 blocks, no tape speed calibratrion yet | +| Driver | Status | Remarks | +| :----------------: | :------: | :------------------------------------------------: | +| normal | PARTIAL | no tape speed calibratrion, no error correction | +| turbo (250 blocks) | PARTIAL | no tape speed calibratrion | ## IEC bus @@ -78,13 +79,13 @@ The following ROM features are currently missing: * 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 | pure software implementation should be feasible | +| Driver | Status | Remarks | +| :----------------: | :------: | :------------------------------------------------: | +| standard | DONE | | +| JiffyDOS | DONE | | +| DolphinDOS | DONE | | +| CIA burst mod | NOT DONE | | +| Mega65 burst | NOT DONE | | ## IEEE-488 bus @@ -92,20 +93,20 @@ The following ROM features are currently missing: * PET era disk drives and printers * various scientific equipment -| Driver | Status | Remarks | -| :-----------: | :------: | :------------------------------------------------: | -| CBM cartridge | NOT DONE | | +| 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 | | +| Driver | Status | Remarks | +| :----------------: | :------: | :------------------------------------------------: | +| UP2400 | NOT DONE | | +| UP9600 | NOT DONE | work started, not functional yet | +| ACIA 6551 | NOT DONE | | # API status diff --git a/c64/aliases/,aliases_ram_lowmem.s b/c64/aliases/,aliases_ram_lowmem.s index 5d5af9ba..1f0c37a7 100644 --- a/c64/aliases/,aliases_ram_lowmem.s +++ b/c64/aliases/,aliases_ram_lowmem.s @@ -155,7 +155,7 @@ .label PNT = $D1 // $D1-$D2 pointer to the current screen line .label PNTR = $D3 // current screen X position (logical column), 0-79 .label QTSW = $D4 // quote mode flag - .label LNMX = $D5 // logical line length, [!] our usage probably differs in details + .label LNMX = $D5 // logical line length, 39 or 79 .label TBLX = $D6 // current screen Y position (row), 0-24 .label SCHAR = $D7 // ASCII value of the last printed character .label INSRT = $D8 // insert mode flag/counter diff --git a/c64/kernal/screen/chrout_screen.s b/c64/kernal/screen/chrout_screen.s index 15323dd9..ae97035f 100644 --- a/c64/kernal/screen/chrout_screen.s +++ b/c64/kernal/screen/chrout_screen.s @@ -120,11 +120,12 @@ chrout_screen_literal: chrout_screen_calc_lptr_done: jsr screen_calculate_PNT_USER - jsr screen_fix_PNTR + jsr screen_calculate_PNTR + jsr screen_calculate_LNMX // FALLTROUGH -chrout_screen_done: +chrout_screen_done: // YYY review all the jumps here // YYY should we update character under cursor here? or in cursor_show_if_enabled? diff --git a/c64/kernal/screen/screen_calculate_lnmx.s b/c64/kernal/screen/screen_calculate_lnmx.s new file mode 100644 index 00000000..3f1669a7 --- /dev/null +++ b/c64/kernal/screen/screen_calculate_lnmx.s @@ -0,0 +1,36 @@ + +// +// Sets LNMX to 39 or 79 +// + + +// YYY value is improper shortly after linee growth! + + +screen_calculate_LNMX: // YYY review all the code, mayybe some optimizations are possible using this value + + ldy TBLX + lda LDTBL, y + bpl screen_calculate_lnmx_79 // this line is a continuation + + cpy #24 + beq screen_calculate_lnmx_39 // this is the last line, which is not a continuation + + iny + lda LDTBL, y + bpl screen_calculate_lnmx_79 // line is continued + + // FALLTROUGH + +screen_calculate_lnmx_39: + + lda #39 + skip_2_bytes_trash_nvz + + // FALLTROUGH + +screen_calculate_lnmx_79: + + lda #79 + sta LNMX + rts diff --git a/c64/kernal/screen/screen_fix_pntr.s b/c64/kernal/screen/screen_calculate_pntr.s similarity index 65% rename from c64/kernal/screen/screen_fix_pntr.s rename to c64/kernal/screen/screen_calculate_pntr.s index 7d256caa..4fa2ea32 100644 --- a/c64/kernal/screen/screen_fix_pntr.s +++ b/c64/kernal/screen/screen_calculate_pntr.s @@ -4,18 +4,18 @@ // -screen_fix_PNTR: +screen_calculate_PNTR: ldy TBLX lda LDTBL, y php jsr screen_get_clipped_PNTR plp - bmi screen_fix_PNTR_0_39 + bmi screen_calculate_PNTR_0_39 // FALLTROUGH -screen_fix_PNTR_40_79: +screen_calculate_PNTR_40_79: tya clc @@ -24,7 +24,7 @@ screen_fix_PNTR_40_79: // FALLTROUGH -screen_fix_PNTR_0_39: +screen_calculate_PNTR_0_39: sty PNTR rts From 2e27b7f9c2081ecdc72a88948bc1083fb0012d4b Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 8 Jan 2020 19:03:28 +0100 Subject: [PATCH 34/77] further line grow fixes --- c64/kernal/screen/chrout_screen_ins.s | 1 - c64/kernal/screen/screen_grow_logical_line.s | 33 ++++++++++++++------ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/c64/kernal/screen/chrout_screen_ins.s b/c64/kernal/screen/chrout_screen_ins.s index 20d99a06..a51dc131 100644 --- a/c64/kernal/screen/chrout_screen_ins.s +++ b/c64/kernal/screen/chrout_screen_ins.s @@ -5,7 +5,6 @@ // YYY does not work properly on growing logical line -// YYY implement LNMX chrout_screen_INS: diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index 7e2627cc..e5b9e9e3 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -4,6 +4,9 @@ screen_grow_logical_line_screen_up: jsr screen_scroll_up + ldy TBLX + lda #$00 + sta LDTBL+1, y // mark the next line as continuation // FALLTROUGH @@ -17,7 +20,7 @@ screen_grow_logical_line: // Do not grow line if previus one is grown ldy TBLX - lda LDTBL,y + lda LDTBL+0, y bpl screen_grow_logical_line_done // If last line, scroll the screen up @@ -25,22 +28,35 @@ screen_grow_logical_line: beq screen_grow_logical_line_screen_up // Do not grow line if already grown - iny - lda LDTBL,y + lda LDTBL+1, y bpl screen_grow_logical_line_done + // Preserve SAL and EAL + + jsr screen_preserve_sal_eal + + // Scroll LDTBL down (start from the end) + ldy #23 +!: + cpy TBLX + beq !+ + bcc !+ + + lda LDTBL+0, y + sta LDTBL+1, y + + dey + bne !- +!: // Mark current line as grown + ldy TBLX lda #$00 - sta LDTBL,y + sta LDTBL+1, y // Now we have to scroll lines downwards to make space. We start from the end, // and work backwards. We cannot be as simple and efficient here as we are // for scrolling up, because we do not know how much must be scrolled. - // Preserve SAL and EAL - - jsr screen_preserve_sal_eal - // Work out how many physical lines to scroll down lda #23 @@ -71,7 +87,6 @@ screen_grow_logical_line: screen_grow_logical_line_loop: // Scroll down one line each loop iteration - // YYY add LDTBL scrolling ldy #39 !: From 9d11276289449bf43a29a251aa5e1395cba6651d Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 8 Jan 2020 19:42:51 +0100 Subject: [PATCH 35/77] LNMX calculation fix --- c64/kernal/screen/screen_calculate_lnmx.s | 3 --- c64/kernal/screen/screen_grow_logical_line.s | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/c64/kernal/screen/screen_calculate_lnmx.s b/c64/kernal/screen/screen_calculate_lnmx.s index 3f1669a7..163d4a75 100644 --- a/c64/kernal/screen/screen_calculate_lnmx.s +++ b/c64/kernal/screen/screen_calculate_lnmx.s @@ -4,9 +4,6 @@ // -// YYY value is improper shortly after linee growth! - - screen_calculate_LNMX: // YYY review all the code, mayybe some optimizations are possible using this value ldy TBLX diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index e5b9e9e3..0c8bd8a6 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -134,4 +134,5 @@ screen_grow_logical_line_copy_done: ldx TBLX inx - jmp screen_clear_line + jsr screen_clear_line + jmp screen_calculate_LNMX From cfe8736778ef250e17ac74a73ffdbbd9af4d9228 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 8 Jan 2020 19:55:39 +0100 Subject: [PATCH 36/77] small screen code size optimization --- c64/kernal/screen/chrout_screen_tab.s | 1 - c64/kernal/screen/screen_get_cliped_pntr.s | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/c64/kernal/screen/chrout_screen_tab.s b/c64/kernal/screen/chrout_screen_tab.s index 59c3816a..efc556ca 100644 --- a/c64/kernal/screen/chrout_screen_tab.s +++ b/c64/kernal/screen/chrout_screen_tab.s @@ -26,7 +26,6 @@ chrout_screen_TAB_FW: chrout_screen_TAB_BW: jsr screen_get_clipped_PNTR - cpy #$00 // YYY maybe it's worth to put this inside screen_get_clipped_PNTR? beq !+ // column 0, recalculating pointers is not necessary, but this is a rare case nevertheless dey diff --git a/c64/kernal/screen/screen_get_cliped_pntr.s b/c64/kernal/screen/screen_get_cliped_pntr.s index c0c85963..413641ad 100644 --- a/c64/kernal/screen/screen_get_cliped_pntr.s +++ b/c64/kernal/screen/screen_get_cliped_pntr.s @@ -1,6 +1,6 @@ // -// Get PNTR value clipped to 0-39 range in .Y, can trash .A +// Get PNTR value clipped to 0-39 range in .Y, sets flags to compare with 0, can trash .A // screen_get_clipped_PNTR: @@ -12,4 +12,5 @@ screen_get_clipped_PNTR: sbc #40 tay !: + cpy #$00 rts From e15c7a1979461ec520edf3363b29df822397953d Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 8 Jan 2020 20:09:09 +0100 Subject: [PATCH 37/77] further screen code improvements --- c64/kernal/screen/chrout_screen_del.s | 5 +---- c64/kernal/screen/chrout_screen_ins.s | 4 +++- c64/kernal/screen/screen_get_logical_line_end_ptr.s | 5 ++--- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/c64/kernal/screen/chrout_screen_del.s b/c64/kernal/screen/chrout_screen_del.s index 6ca9c4f0..ed614672 100644 --- a/c64/kernal/screen/chrout_screen_del.s +++ b/c64/kernal/screen/chrout_screen_del.s @@ -13,7 +13,6 @@ chrout_screen_DEL: !: // ldx PNTR jsr screen_get_clipped_PNTR - cpy #$00 bne chrout_screen_del_column_non_0 // FALLTROUGH @@ -31,12 +30,10 @@ chrout_screen_del_column_0: // Update PNT and USER pointers jsr screen_calculate_PNT_USER - // Put space character at the current cursor position + // Put space character at the current cursor position (do not clear the color!) ldy #39 lda #$20 sta (PNT),y - - // XXX should we clear the color too? // Finish with recalculating all the variables jmp chrout_screen_calc_lptr_done diff --git a/c64/kernal/screen/chrout_screen_ins.s b/c64/kernal/screen/chrout_screen_ins.s index a51dc131..1345a3f8 100644 --- a/c64/kernal/screen/chrout_screen_ins.s +++ b/c64/kernal/screen/chrout_screen_ins.s @@ -4,7 +4,8 @@ // -// YYY does not work properly on growing logical line +// YYY does not work properly when insertion no longer possible +// YYY does not work properlyy in second part of logical line chrout_screen_INS: @@ -25,6 +26,7 @@ chrout_screen_INS: chrout_screen_ins_possible: // Move chars towards end of the line + jsr screen_calculate_PNT_USER jsr screen_get_logical_line_end_ptr !: // Note: While the following routine is obvious to any skilled diff --git a/c64/kernal/screen/screen_get_logical_line_end_ptr.s b/c64/kernal/screen/screen_get_logical_line_end_ptr.s index c6949170..1d09f70c 100644 --- a/c64/kernal/screen/screen_get_logical_line_end_ptr.s +++ b/c64/kernal/screen/screen_get_logical_line_end_ptr.s @@ -6,11 +6,10 @@ screen_get_logical_line_end_ptr: cpy #24 bcs screen_get_logical_line_end_39 // last line of the screen - lda LDTBL, y + lda LDTBL+0, y bpl screen_get_logical_line_end_39 // current line continues previous one - iny - lda LDTBL, y + lda LDTBL+1, y bmi screen_get_logical_line_end_39 // current line is not continued // FALLTROUGH From 37dbe00ec2d2ef4421ac6974b66cd6b1a4da3adc Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 8 Jan 2020 20:28:17 +0100 Subject: [PATCH 38/77] work on delete key support --- c64/kernal/screen/chrout_screen_crsr.s | 2 -- c64/kernal/screen/chrout_screen_del.s | 26 +++++++++++--------------- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/c64/kernal/screen/chrout_screen_crsr.s b/c64/kernal/screen/chrout_screen_crsr.s index fbf575aa..2b8cb339 100644 --- a/c64/kernal/screen/chrout_screen_crsr.s +++ b/c64/kernal/screen/chrout_screen_crsr.s @@ -3,8 +3,6 @@ // Cursor keys handling within CHROUT // -// YYY bug: after line growth cursor LEFT/RIGHT jumps to previous line!!! - chrout_screen_CRSR_UP: diff --git a/c64/kernal/screen/chrout_screen_del.s b/c64/kernal/screen/chrout_screen_del.s index ed614672..fecefdfa 100644 --- a/c64/kernal/screen/chrout_screen_del.s +++ b/c64/kernal/screen/chrout_screen_del.s @@ -11,8 +11,7 @@ chrout_screen_DEL: beq !+ jmp chrout_screen_quote !: - // ldx PNTR - jsr screen_get_clipped_PNTR + ldy PNTR bne chrout_screen_del_column_non_0 // FALLTROUGH @@ -40,15 +39,14 @@ chrout_screen_del_column_0: chrout_screen_del_column_non_0: -/* YYY disabled for rework + // We need to scroll back the rest of the logical line + // YYY this part scrolls back too much! - // Copy rest of logical line back jsr screen_get_logical_line_end_ptr - ldy PNTR - cpy LNMX - beq !++ - dey !: + cpy PNTR + beq !+ + iny lda (PNT),y dey @@ -58,21 +56,19 @@ chrout_screen_del_column_non_0: dey sta (USER),y iny - cpy LNMX - bne !- - // Clear char at end of line - jsr screen_get_current_line_logical_length + bne !- // branch always +!: + // Clear char at end of line (just the character - not color!) + + jsr screen_get_logical_line_end_ptr tay lda #$20 sta (PNT),y -!: dec PNTR // FALLTROUGH -*/ - chrout_screen_del_done: jmp chrout_screen_done From d48cea82bec5937070d5a3ae995e2142a36282a3 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 8 Jan 2020 20:40:47 +0100 Subject: [PATCH 39/77] firther work on char delete --- c64/kernal/screen/chrout_screen_del.s | 16 ++++++++++------ c64/kernal/screen/screen_calculate_lnmx.s | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/c64/kernal/screen/chrout_screen_del.s b/c64/kernal/screen/chrout_screen_del.s index fecefdfa..0eac4831 100644 --- a/c64/kernal/screen/chrout_screen_del.s +++ b/c64/kernal/screen/chrout_screen_del.s @@ -40,13 +40,16 @@ chrout_screen_del_column_0: chrout_screen_del_column_non_0: // We need to scroll back the rest of the logical line - // YYY this part scrolls back too much! + + // YYY does not work properly when cursor crosses physical line boundary + // YYY possibly it should remove the 'continuaed line' mark in some cases, test on original ROMs jsr screen_get_logical_line_end_ptr + tya + tax + ldy PNTR + dey !: - cpy PNTR - beq !+ - iny lda (PNT),y dey @@ -57,12 +60,13 @@ chrout_screen_del_column_non_0: sta (USER),y iny - bne !- // branch always + dex + cpx PNTR + bne !- !: // Clear char at end of line (just the character - not color!) jsr screen_get_logical_line_end_ptr - tay lda #$20 sta (PNT),y dec PNTR diff --git a/c64/kernal/screen/screen_calculate_lnmx.s b/c64/kernal/screen/screen_calculate_lnmx.s index 163d4a75..59a75515 100644 --- a/c64/kernal/screen/screen_calculate_lnmx.s +++ b/c64/kernal/screen/screen_calculate_lnmx.s @@ -4,7 +4,7 @@ // -screen_calculate_LNMX: // YYY review all the code, mayybe some optimizations are possible using this value +screen_calculate_LNMX: ldy TBLX lda LDTBL, y From 02afdec2658fe6ea10210761cd0a0953e300d185 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 8 Jan 2020 23:24:39 +0100 Subject: [PATCH 40/77] bugfixed character delete --- c64/kernal/screen/chrout_screen_del.s | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/c64/kernal/screen/chrout_screen_del.s b/c64/kernal/screen/chrout_screen_del.s index 0eac4831..4ab5572b 100644 --- a/c64/kernal/screen/chrout_screen_del.s +++ b/c64/kernal/screen/chrout_screen_del.s @@ -12,7 +12,7 @@ chrout_screen_DEL: jmp chrout_screen_quote !: ldy PNTR - bne chrout_screen_del_column_non_0 + bne chrout_screen_del_column_normal // FALLTROUGH @@ -35,18 +35,26 @@ chrout_screen_del_column_0: sta (PNT),y // Finish with recalculating all the variables - jmp chrout_screen_calc_lptr_done + bne chrout_screen_del_done -chrout_screen_del_column_non_0: +chrout_screen_del_column_normal: // We need to scroll back the rest of the logical line - // YYY does not work properly when cursor crosses physical line boundary - // YYY possibly it should remove the 'continuaed line' mark in some cases, test on original ROMs + // First reduce PNTR to 0-39 range + jsr screen_get_clipped_PNTR + sty PNTR + // Now get the offset to the last logical line character jsr screen_get_logical_line_end_ptr tya + + // Substract the PNTR value, this will tell us how many characters we need to move + sec + sbc PNTR tax + + // Perform the character copy (scroll back) in a loop ldy PNTR dey !: @@ -61,9 +69,8 @@ chrout_screen_del_column_non_0: iny dex - cpx PNTR - bne !- -!: + bpl !- + // Clear char at end of line (just the character - not color!) jsr screen_get_logical_line_end_ptr @@ -75,4 +82,4 @@ chrout_screen_del_column_non_0: chrout_screen_del_done: - jmp chrout_screen_done + jmp chrout_screen_calc_lptr_done From b3f1b7fb4121ec4a7c8579a479ee534b369c9b4c Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Thu, 9 Jan 2020 17:09:23 +0100 Subject: [PATCH 41/77] improved RETURN keyy handling, some documentation update --- c64/kernal/screen/chrout_screen_del.s | 8 ++++---- c64/kernal/screen/chrout_screen_return.s | 15 +++++++++++++++ c64/kernal/screen/screen_grow_logical_line.s | 1 + c64/kernal/screen/screen_preserve_sal_eal.s | 12 ++++++++++-- c64/kernal/screen/screen_restore_sal_eal.s | 12 ++++++++++-- 5 files changed, 40 insertions(+), 8 deletions(-) diff --git a/c64/kernal/screen/chrout_screen_del.s b/c64/kernal/screen/chrout_screen_del.s index 4ab5572b..2b02b6af 100644 --- a/c64/kernal/screen/chrout_screen_del.s +++ b/c64/kernal/screen/chrout_screen_del.s @@ -58,15 +58,15 @@ chrout_screen_del_column_normal: ldy PNTR dey !: - iny - lda (PNT),y - dey - sta (PNT),y iny lda (USER),y dey sta (USER),y iny + lda (PNT),y + dey + sta (PNT),y + iny dex bpl !- diff --git a/c64/kernal/screen/chrout_screen_return.s b/c64/kernal/screen/chrout_screen_return.s index b870cd5b..283c4389 100644 --- a/c64/kernal/screen/chrout_screen_return.s +++ b/c64/kernal/screen/chrout_screen_return.s @@ -7,8 +7,23 @@ chrout_screen_RETURN: // RETURN clears quote and insert modes, it also clears reverse flag + lda #$00 sta QTSW sta INSRT sta RVS + + // RETURN key moves cursor two lines down in case + // of first line of the extended logical line + + ldy TBLX + cpy #24 + beq !+ // last line on screen - no need for a double line skip + + lda LDTBL+1, y + bmi !+ // current line is not continued + + inc TBLX + jsr screen_calculate_PNT_USER +!: jmp screen_advance_to_next_line diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index 0c8bd8a6..5b5f39ee 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -1,4 +1,5 @@ +// YYY growing logical line in the last line is unstable screen_grow_logical_line_screen_up: diff --git a/c64/kernal/screen/screen_preserve_sal_eal.s b/c64/kernal/screen/screen_preserve_sal_eal.s index df92288f..175c51bc 100644 --- a/c64/kernal/screen/screen_preserve_sal_eal.s +++ b/c64/kernal/screen/screen_preserve_sal_eal.s @@ -5,11 +5,19 @@ screen_preserve_sal_eal: plx_trash_a ply_trash_a + // Note: While the following routine is obvious to any skilled + // in the art as the most obvious simple and efficient solution, + // it results in a relatively long verbatim stretch of bytes when + // compared to the C64 KERNAL. Thus we have swapped the order, + // just to reduce the potential for any argument of copyright + // infringement, even though we really do not believe that the + // routine can be copyrighted due to the lack of creativity. + lda SAL+0 pha - lda SAL+1 - pha lda EAL+0 + pha + lda SAL+1 pha lda EAL+1 pha diff --git a/c64/kernal/screen/screen_restore_sal_eal.s b/c64/kernal/screen/screen_restore_sal_eal.s index b2d95a52..cfa85fd9 100644 --- a/c64/kernal/screen/screen_restore_sal_eal.s +++ b/c64/kernal/screen/screen_restore_sal_eal.s @@ -5,13 +5,21 @@ screen_restore_sal_eal: plx_trash_a ply_trash_a + // Note: While the following routine is obvious to any skilled + // in the art as the most obvious simple and efficient solution, + // it results in a relatively long verbatim stretch of bytes when + // compared to the C64 KERNAL. Thus we have swapped the order, + // just to reduce the potential for any argument of copyright + // infringement, even though we really do not believe that the + // routine can be copyrighted due to the lack of creativity. + pla sta EAL+1 pla - sta EAL+0 - pla sta SAL+1 pla + sta EAL+0 + pla sta SAL+0 jmp screen_common_sal_eal From 34e921c18a8de9e43d32eab51d26cd4af6b4ea1a Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Thu, 9 Jan 2020 22:38:12 +0100 Subject: [PATCH 42/77] fixed potential problem in screen output with logical line growing --- c64/kernal/keyboard/chrin_keyboard.s | 2 +- c64/kernal/screen/chrout_screen.s | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/c64/kernal/keyboard/chrin_keyboard.s b/c64/kernal/keyboard/chrin_keyboard.s index e50ee425..be3efa72 100644 --- a/c64/kernal/keyboard/chrin_keyboard.s +++ b/c64/kernal/keyboard/chrin_keyboard.s @@ -72,7 +72,7 @@ read_from_keyboard: cmp #$0D bne not_enter -chrin_enter: // YYY test this! +chrin_enter: jsr cursor_disable jsr pop_keyboard_buffer diff --git a/c64/kernal/screen/chrout_screen.s b/c64/kernal/screen/chrout_screen.s index ae97035f..c509ce8b 100644 --- a/c64/kernal/screen/chrout_screen.s +++ b/c64/kernal/screen/chrout_screen.s @@ -111,7 +111,7 @@ chrout_screen_literal: // If not the 80th character of the logical row, we are done cpy #80 - bcc chrout_screen_done + bcc chrout_screen_calc_lptr_done // Advance to the next line From 793c83be2b576ab267b7b218c718c52e3fc02c65 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Thu, 9 Jan 2020 22:49:55 +0100 Subject: [PATCH 43/77] remove potentiallyy dangerous screen code optimizations --- c64/kernal/screen/chrout_screen.s | 2 +- c64/kernal/screen/chrout_screen_clr.s | 2 +- c64/kernal/screen/chrout_screen_home.s | 2 +- c64/kernal/screen/chrout_screen_ins.s | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/c64/kernal/screen/chrout_screen.s b/c64/kernal/screen/chrout_screen.s index c509ce8b..d164a776 100644 --- a/c64/kernal/screen/chrout_screen.s +++ b/c64/kernal/screen/chrout_screen.s @@ -125,7 +125,7 @@ chrout_screen_calc_lptr_done: // FALLTROUGH -chrout_screen_done: // YYY review all the jumps here +chrout_screen_done: // YYY should we update character under cursor here? or in cursor_show_if_enabled? diff --git a/c64/kernal/screen/chrout_screen_clr.s b/c64/kernal/screen/chrout_screen_clr.s index ab9469dd..75be3574 100644 --- a/c64/kernal/screen/chrout_screen_clr.s +++ b/c64/kernal/screen/chrout_screen_clr.s @@ -6,4 +6,4 @@ chrout_screen_CLR: jsr clear_screen - jmp chrout_screen_done + jmp chrout_screen_calc_lptr_done diff --git a/c64/kernal/screen/chrout_screen_home.s b/c64/kernal/screen/chrout_screen_home.s index 77976bd0..7acbbe12 100644 --- a/c64/kernal/screen/chrout_screen_home.s +++ b/c64/kernal/screen/chrout_screen_home.s @@ -7,4 +7,4 @@ chrout_screen_HOME: jsr cursor_home - jmp chrout_screen_done + jmp chrout_screen_calc_lptr_done diff --git a/c64/kernal/screen/chrout_screen_ins.s b/c64/kernal/screen/chrout_screen_ins.s index 1345a3f8..d7576c2e 100644 --- a/c64/kernal/screen/chrout_screen_ins.s +++ b/c64/kernal/screen/chrout_screen_ins.s @@ -19,7 +19,7 @@ chrout_screen_INS: jsr screen_grow_logical_line jsr screen_check_space_ends_line - bne_far chrout_screen_done + bne_far chrout_screen_calc_lptr_done // FALLTROUGH @@ -57,4 +57,4 @@ chrout_screen_ins_possible: lda #$20 sta (PNT), y - jmp chrout_screen_done + jmp chrout_screen_calc_lptr_done From c9ba1731959a4f34f8e2772aacffc855b5fb6b9a Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Thu, 9 Jan 2020 23:01:07 +0100 Subject: [PATCH 44/77] small size optimization of screen code --- c64/kernal/screen/chrout_screen.s | 5 +--- c64/kernal/screen/screen_calculate_pntr.s | 30 ------------------- ...te_lnmx.s => screen_calculate_pntr_lnmx.s} | 27 +++++++++++++++++ 3 files changed, 28 insertions(+), 34 deletions(-) delete mode 100644 c64/kernal/screen/screen_calculate_pntr.s rename c64/kernal/screen/{screen_calculate_lnmx.s => screen_calculate_pntr_lnmx.s} (59%) diff --git a/c64/kernal/screen/chrout_screen.s b/c64/kernal/screen/chrout_screen.s index d164a776..36f80d85 100644 --- a/c64/kernal/screen/chrout_screen.s +++ b/c64/kernal/screen/chrout_screen.s @@ -120,14 +120,11 @@ chrout_screen_literal: chrout_screen_calc_lptr_done: jsr screen_calculate_PNT_USER - jsr screen_calculate_PNTR - jsr screen_calculate_LNMX + jsr screen_calculate_PNTR_LNMX // FALLTROUGH chrout_screen_done: - // YYY should we update character under cursor here? or in cursor_show_if_enabled? - jsr cursor_show_if_enabled jmp chrout_done_success diff --git a/c64/kernal/screen/screen_calculate_pntr.s b/c64/kernal/screen/screen_calculate_pntr.s deleted file mode 100644 index 4fa2ea32..00000000 --- a/c64/kernal/screen/screen_calculate_pntr.s +++ /dev/null @@ -1,30 +0,0 @@ - -// -// Sets PNTR in a proper range (0-39 or 40-79) depending on the -// - - -screen_calculate_PNTR: - - ldy TBLX - lda LDTBL, y - php - jsr screen_get_clipped_PNTR - plp - bmi screen_calculate_PNTR_0_39 - - // FALLTROUGH - -screen_calculate_PNTR_40_79: - - tya - clc - adc #40 - tay - - // FALLTROUGH - -screen_calculate_PNTR_0_39: - - sty PNTR - rts diff --git a/c64/kernal/screen/screen_calculate_lnmx.s b/c64/kernal/screen/screen_calculate_pntr_lnmx.s similarity index 59% rename from c64/kernal/screen/screen_calculate_lnmx.s rename to c64/kernal/screen/screen_calculate_pntr_lnmx.s index 59a75515..b6645ba8 100644 --- a/c64/kernal/screen/screen_calculate_lnmx.s +++ b/c64/kernal/screen/screen_calculate_pntr_lnmx.s @@ -1,9 +1,36 @@ // +// Sets PNTR in a proper range (0-39 or 40-79) // Sets LNMX to 39 or 79 // +screen_calculate_PNTR_LNMX: + + ldy TBLX + lda LDTBL, y + php + jsr screen_get_clipped_PNTR + plp + bmi screen_calculate_PNTR_0_39 + + // FALLTROUGH + +screen_calculate_PNTR_40_79: + + tya + clc + adc #40 + tay + + // FALLTROUGH + +screen_calculate_PNTR_0_39: + + sty PNTR + + // FALLTROUGH + screen_calculate_LNMX: ldy TBLX From c68a25538319f6f6c4b179ce494b263a51f63d69 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Thu, 9 Jan 2020 23:06:51 +0100 Subject: [PATCH 45/77] fixed logical linee growth instability --- c64/kernal/screen/screen_grow_logical_line.s | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index 5b5f39ee..7be77bf9 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -1,15 +1,4 @@ -// YYY growing logical line in the last line is unstable - - -screen_grow_logical_line_screen_up: - - jsr screen_scroll_up - ldy TBLX - lda #$00 - sta LDTBL+1, y // mark the next line as continuation - - // FALLTROUGH screen_grow_logical_line_done: @@ -17,6 +6,13 @@ screen_grow_logical_line_done: jmp screen_calculate_PNT_USER +screen_grow_logical_line_screen_up: + + jsr screen_scroll_up + + // FALLTROUGH + + screen_grow_logical_line: // Do not grow line if previus one is grown @@ -136,4 +132,4 @@ screen_grow_logical_line_copy_done: ldx TBLX inx jsr screen_clear_line - jmp screen_calculate_LNMX + jmp screen_calculate_PNTR_LNMX From 7fe8a8b2440fb0154c186b5a8894cb921e221829 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 10 Jan 2020 16:58:02 +0100 Subject: [PATCH 46/77] some character insertion fixes --- c64/kernal/screen/chrout_screen_ins.s | 20 ++++---- .../screen/screen_check_space_ends_line.s | 18 +++---- .../screen/screen_get_logical_line_end_ptr.s | 48 +++++++++---------- 3 files changed, 45 insertions(+), 41 deletions(-) diff --git a/c64/kernal/screen/chrout_screen_ins.s b/c64/kernal/screen/chrout_screen_ins.s index d7576c2e..52861ba1 100644 --- a/c64/kernal/screen/chrout_screen_ins.s +++ b/c64/kernal/screen/chrout_screen_ins.s @@ -4,29 +4,24 @@ // -// YYY does not work properly when insertion no longer possible -// YYY does not work properlyy in second part of logical line +// YYY moves cursor down the first time no more insertion is possible +// YYY in second part of the logical line moves everything froom the start of the line chrout_screen_INS: - // First check if last character of the line is space + // First check if last character of the logiccall line is space jsr screen_check_space_ends_line beq chrout_screen_ins_possible - // Not space, try to grow logical line and check once again + // Not space, we cannot insert anything - jsr screen_grow_logical_line - jsr screen_check_space_ends_line bne_far chrout_screen_calc_lptr_done - - // FALLTROUGH chrout_screen_ins_possible: // Move chars towards end of the line - jsr screen_calculate_PNT_USER jsr screen_get_logical_line_end_ptr !: // Note: While the following routine is obvious to any skilled @@ -57,4 +52,11 @@ chrout_screen_ins_possible: lda #$20 sta (PNT), y + // If line does not end with space now, grow try to grow the logical line + + jsr screen_check_space_ends_line + beq !+ + + jsr screen_grow_logical_line +!: jmp chrout_screen_calc_lptr_done diff --git a/c64/kernal/screen/screen_check_space_ends_line.s b/c64/kernal/screen/screen_check_space_ends_line.s index 245ced8d..cbd641f3 100644 --- a/c64/kernal/screen/screen_check_space_ends_line.s +++ b/c64/kernal/screen/screen_check_space_ends_line.s @@ -1,8 +1,10 @@ - -screen_check_space_ends_line: - - jsr screen_get_logical_line_end_ptr - lda (PNT), y - cmp #$20 - - rts + +screen_check_space_ends_line: + + jsr screen_get_logical_line_end_ptr + + lda (PNT), y + cmp #$20 + + rts + diff --git a/c64/kernal/screen/screen_get_logical_line_end_ptr.s b/c64/kernal/screen/screen_get_logical_line_end_ptr.s index 1d09f70c..d396db35 100644 --- a/c64/kernal/screen/screen_get_logical_line_end_ptr.s +++ b/c64/kernal/screen/screen_get_logical_line_end_ptr.s @@ -1,25 +1,25 @@ - - -screen_get_logical_line_end_ptr: - - ldy TBLX - cpy #24 - bcs screen_get_logical_line_end_39 // last line of the screen - - lda LDTBL+0, y - bpl screen_get_logical_line_end_39 // current line continues previous one - - lda LDTBL+1, y - bmi screen_get_logical_line_end_39 // current line is not continued - - // FALLTROUGH - -screen_get_logical_line_end_79: - - ldy #79 - rts - -screen_get_logical_line_end_39: - - ldy #39 + + +screen_get_logical_line_end_ptr: + + ldy TBLX + cpy #24 + bcs screen_get_logical_line_end_39 // last line of the screen + + lda LDTBL+0, y + bpl screen_get_logical_line_end_39 // current line continues previous one + + lda LDTBL+1, y + bmi screen_get_logical_line_end_39 // current line is not continued + + // FALLTROUGH + +screen_get_logical_line_end_79: + + ldy #79 + rts + +screen_get_logical_line_end_39: + + ldy #39 rts \ No newline at end of file From 321638895582e5c138b41b039228db64107f61f3 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 10 Jan 2020 17:09:13 +0100 Subject: [PATCH 47/77] one more char insertion bug fixed --- c64/kernal/screen/chrout_screen_ins.s | 7 +++---- c64/kernal/screen/screen_grow_logical_line.s | 9 +++++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/c64/kernal/screen/chrout_screen_ins.s b/c64/kernal/screen/chrout_screen_ins.s index 52861ba1..90a44aba 100644 --- a/c64/kernal/screen/chrout_screen_ins.s +++ b/c64/kernal/screen/chrout_screen_ins.s @@ -4,20 +4,19 @@ // -// YYY moves cursor down the first time no more insertion is possible -// YYY in second part of the logical line moves everything froom the start of the line +// YYY in second part of the logical line moves everything from the start of the line chrout_screen_INS: - // First check if last character of the logiccall line is space + // First check if last character of the logical line is space jsr screen_check_space_ends_line beq chrout_screen_ins_possible // Not space, we cannot insert anything - bne_far chrout_screen_calc_lptr_done + bne_far chrout_screen_done chrout_screen_ins_possible: diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index 7be77bf9..b16d52b7 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -1,8 +1,13 @@ +screen_grow_logical_line_done_scroll: + + inc TBLX + + // FALLTROUGH + screen_grow_logical_line_done: - inc TBLX jmp screen_calculate_PNT_USER @@ -18,7 +23,7 @@ screen_grow_logical_line: // Do not grow line if previus one is grown ldy TBLX lda LDTBL+0, y - bpl screen_grow_logical_line_done + bpl screen_grow_logical_line_done_scroll // If last line, scroll the screen up cpy #24 From 4eac2252874fce705db47d8410f981f4f8682c5d Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 10 Jan 2020 17:45:13 +0100 Subject: [PATCH 48/77] char insertion works now --- c64/kernal/screen/chrout_screen_ins.s | 66 ++++++++++++++++++++------- 1 file changed, 49 insertions(+), 17 deletions(-) diff --git a/c64/kernal/screen/chrout_screen_ins.s b/c64/kernal/screen/chrout_screen_ins.s index 90a44aba..3e2b2fbe 100644 --- a/c64/kernal/screen/chrout_screen_ins.s +++ b/c64/kernal/screen/chrout_screen_ins.s @@ -4,9 +4,6 @@ // -// YYY in second part of the logical line moves everything from the start of the line - - chrout_screen_INS: // First check if last character of the logical line is space @@ -22,7 +19,52 @@ chrout_screen_ins_possible: // Move chars towards end of the line jsr screen_get_logical_line_end_ptr -!: + + // Special handling for cursor in second line + ldx TBLX + lda LDTBL+0, x + bpl chrout_screen_ins_second_line + + // Perform character copy + jsr chrout_screen_ins_copy_loop + + // Put space in the inserted gap + lda #$20 + sta (PNT), y + + // If line does not end with space now, try to grow the logical line + + jsr screen_check_space_ends_line + beq chrout_screen_ins_done + jsr screen_grow_logical_line + + // FALLTROUGH + +chrout_screen_ins_done: + + // End of processing + jmp chrout_screen_calc_lptr_done + +chrout_screen_ins_second_line: + + // Adapt PNTR for copying + lda PNTR + sec + sbc #40 + sta PNTR + + // Perform character copy + jsr chrout_screen_ins_copy_loop + + // Put space in the inserted gap + lda #$20 + sta (PNT), y + + // End of processing + bne chrout_screen_ins_done // branch always + +chrout_screen_ins_copy_loop: + // Note: While the following routine is obvious to any skilled // in the art as the most obvious simple and efficient solution, // if the screen writes are before the colour writes, it results @@ -42,20 +84,10 @@ chrout_screen_ins_possible: dey cpy PNTR - bne !- + bne chrout_screen_ins_copy_loop // Increase insert mode count (which causes quote-mode like behaviour) inc INSRT - // Put space in the inserted gap - lda #$20 - sta (PNT), y - - // If line does not end with space now, grow try to grow the logical line - - jsr screen_check_space_ends_line - beq !+ - - jsr screen_grow_logical_line -!: - jmp chrout_screen_calc_lptr_done + // Return from loop + rts From 7539c6b0726fd72f7dfcbb84c2997f1f4cc716bc Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 10 Jan 2020 18:07:42 +0100 Subject: [PATCH 49/77] fixed decimal mode usage problem --- STATUS.md | 2 +- bin/basic_generic.rom | Bin 8192 -> 8192 bytes bin/basic_testing.rom | Bin 8192 -> 8192 bytes bin/basic_ultimate64.rom | Bin 8192 -> 8192 bytes bin/kernal_generic.rom | Bin 8192 -> 8192 bytes bin/kernal_testing.rom | Bin 8192 -> 8192 bytes bin/kernal_ultimate64.rom | Bin 8192 -> 8192 bytes bin/mega65.rom | Bin 131072 -> 131072 bytes c64/aliases/,aliases_cpu.s | 2 +- c64/kernal/print/print_hex_byte.s | 2 ++ 10 files changed, 4 insertions(+), 2 deletions(-) diff --git a/STATUS.md b/STATUS.md index 15adec12..4d1b992a 100644 --- a/STATUS.md +++ b/STATUS.md @@ -58,7 +58,7 @@ The following ROM features are currently missing: | Driver | Status | Remarks | | :----------------: | :------: | :------------------------------------------------: | -| VIC-II | PARTIAL | rework in progress | +| VIC-II | DONE | | | 80 columns, VDC | NOT DONE | | | 80 columns, Mega65 | NOT DONE | | diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom index 5adcd38c1f60c4e2417591884ea14a48c906b4f0..71f93854919b8e39d39150ee44d05d14e57c8980 100644 GIT binary patch delta 524 zcmZ`#O-ma=7@plt+|h|9;2}||nPLk@Jj7C^ifz4BF_-=Vr+TT!{(?ksFCJoKE{e1U z*_E!kl9EHoA!$ysyR!D?d7=^v8URnye&aM{^^=06BndfVm!c1YNG@EI-`fGgR zzu(8e!O8R8#~igO%lBft>2Tef#M_^7!~OE%uata%qlL&n2{?qVL|@TTG(x{c5BvX@ z%yammO2>Mn=H_bEl#B$i;Z~o*X-Q0;(?m6RvURh}c|X>wt@i3c1Q$g~Uo!o~VeSE~nEUy%E41g$*$SoWmcfuSK!YD1oE>L7dqDTAMv4oft9Dw4TLngf;S zW@`DAn9Tv!)&T+Gkm^RybbO=KMSnc{CGHsXaBy+B*kWfF=5dT&?IGI%Uaws*wlZ-K h1!&#yzCVp}p7kBi+3eU@mM*08!QVM)d<)yA<9z@C delta 524 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 delta 515 zcmZut&r1S97+tm2YE1(p>`*&WhYW%WcBwFmPLfOX4@65*C<_stLnZRkNtuffkpzWn zDJ((I!RQpbMzD1*T7^Q$Xy_6Vw0&!r4h_uvX6DU%-;cy}VmcKXkm~Xjx-%nrv|m6k zwF5uI!wJnKt^>AlJQ_#4IV36TpN_8oDI9P5vhNr0X7gM3e|AW!BMEQQDd%ck*m$Kx z>~{w7u#?6M&MTXA+TSwiu)oysGBel_OLB5G$?pW>`K*cV3wV$5*(7|%JOl2zh5)Z! z6M%F(2N-N$j>~4&R1J!_&s!>*soTnzrv5f2WKFm1kbKFJycxT#`HFqf|oypC~e?eUmUuDIACrG6M!g zBV=CTW?|(sp^{-(L(N&vq)+n@FFYC^(gt^oq;L(jXvuw1 zH)w@$Q9Mn%gPwG%4d3)U*eL^_^ezp=s`^t+y>jXAM@$*az2#D@3ON}oLX8gL<06|V X#W2tI(Iev{qoZSZk&VOX9$Ehn$+7&x diff --git a/bin/kernal_generic.rom b/bin/kernal_generic.rom index 5cf03a31c14b95df1a532b4b74c52f1096da34ad..cf7e19a03c0a44d704a31503800ef6febd7f86bb 100644 GIT binary patch delta 4636 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 xk3?~MnD?(*zIHcj|ddIZL2%}B{|B$PH`M?D delta 4691 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

&JgP4{=32y#iY` zz|V54YyT5OK6Ji=TB7c)_bGf6dO_I2ZrKcx*ACM2+*CU9S__fahIHhWtwml{Po2Xf z^TJ`a(h9DSZ62h+74iX14^i)xkt5(G3sQisg5I?HGV(Ly5G*!R1I^T6Gxb^X*k@ic zjSC~K1BxCJgVrEnT>Z+<-hPODq&pf_LCqDsen(kj^L7PnuxMA@=7@W*-yu_Kcm(^b z3P8*O4t1EnE6?(C5KfjD+j{N@)9W7-E@eJg^lS{?qobn?0X%8&A5CGc4G^VL3qaa zXx>qXl83<&OO3en9@;DXbj?G?mqX4gsCr&-tl45b5OPv#{qh>t3Teix_tT7stW(pB zkeX(U01_ed7?fYue59K|U8={HuBN|eHV%>Qwfl{9@T!2^wTLDxfBCI@)%sY@ zq!C|6F%Bh*wUhifS#1Tq?U~3Hhp)zdjGU_14}*1e!)RX;3ky(!(-n=xD77ehR4^sE zp66ZeOmN2d?FE%OA?|=Vy_0_C^ZlAfVocz#OI4=|4vCXyeV>!06!&?QEVy&_VB8nB zkN5UV9TifiwL*g&-!229`A+o-0LTYR^>XnxxspH6cQ`3g-__xWcb!)uc{ki1?hAK@ zXZ>VCIxmlvh0eEqH|i&|7QWNMceI{QXHhDO{RFHevfZCi0CH%})lEYbnU1GQ6INTP zL4B)=SFV9^2!%zRtKaKc?KY|1b7LevLMaC|T~$@tDm~u^+J4S=^0Tr>)mDwBRXw+S ztA~xb3xUjdxY*TR+b4Cp&hxXif!erq{{BpU?OQwLF;ma&Q0URonuCLZj3G(`4tC~}%GiouvA$LeT z+K@AZ8zT^Qg5kmcXPwh>5k0&&P*+V$^pNkV57E{Y_d4RXu7KAOuw4(5sqlcx0Wc9F z&04zSE&6yZ-S8Hq>ALFfH|XYnr@c4cp~-A-?|!aA1JhiD2$dVQKOC8_*3yp^;x6D~ zq-DeIu-Zk`XvqWr*MMVD^i@>c3pD!ShL^HpQHb1bg-|RiUia&?k0Y6C9)D)Wkd7-Ma>Y?-D)=8$ zxMdMnF5;Doc+DcFCh*uIet!~gUcx_&;w|BBKYVGPDb&C2);at uFHQ=c2i6rWP2#(ghl=%ww(1XU)8oM@?3lz^A?J`taTJxD`=4*xl>Y?*w=kXn diff --git a/bin/kernal_testing.rom b/bin/kernal_testing.rom index 4db16e983545f48a51755f5bfcc9ee889fb5359e..0862000177731e98510cab0e9889b5cabc5e8812 100644 GIT binary patch delta 4960 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 delta 5106 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 diff --git a/bin/kernal_ultimate64.rom b/bin/kernal_ultimate64.rom index cd8e33aab527502642805034ca5e1d4e8dbcc90a..027ac19d32e1d4826df0ff98fe62a4a42cce42c7 100644 GIT binary patch delta 4863 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 LSMfsv diff --git a/bin/mega65.rom b/bin/mega65.rom index 63418690738795d2759fc9a36e664e8f5fe8ad5c..614b20de7390c183557fffec3749202a4bee9c90 100644 GIT binary patch delta 6297 zcmcgwe|%Hrxj#84ZIYJK6k3{s;Jbphk%C19JG4@D(@ftxyXmIPP0r?q;mS5Q@9wxT zm%8=zW}U^pj<-K((v~*&c~ksc z|M2e{=y`vf_kG^?eV*_0eV+H!)#>Z%^ua|g@#EJ24za5^QSZrn-q$JRN7G7D`hid= zJu4KMczKb_g;uq?vs?^XG%SD1)w$4G0xk5MVvFX z&%0Nlwl-;VG))${Z_ZS`Uq)Y5Q5g~IJgZo%S9Ezwi^_R@eh&wQ!%D7B=Hr89m`~X+qVChIeU0 z)lr6IN0cOft5bYbT3LQ&uu8gnc&%Tm8m@r#-KDs#jhCt|(tQ?5Up1^V?Z~qD(Tanj zL;CZ#n&fB&F+>r$hMaO0Z{it-cQK)AOC$u#S%qr8(E=xsx1ip%)eoma6~z4|T9y&` z@1B1H*LxU-k=9m?YJ}ZV#V8}}5jVEp!+N~pnuA{|eXUc

62Rv}kfS2dg~tdrKm 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 delta 6262 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 Date: Fri, 10 Jan 2020 22:03:10 +0100 Subject: [PATCH 50/77] initial support for Mega65 extra ROM --- Makefile | 90 +++++++++++++------ c64/basic/,aliases.s | 1 + c64/basic/,imports.s | 34 ++++--- c64/basic/a408.reason.s | 4 + c64/basic/a453.unknown.s | 6 +- c64/basic/a483.main.s | 8 +- c64/basic/a533.linkprg.s | 6 +- c64/basic/a57c.chrnch.s | 8 +- c64/basic/a644.new.s | 4 + c64/basic/a659.setcharptr.s | 4 + c64/basic/a68e.runc.s | 8 +- c64/basic/a71a.qplop.s | 8 +- c64/basic/a7ae.newstt.s | 10 ++- c64/basic/a7e4.gone.s | 8 +- c64/basic/ab1e.strout.s | 7 +- c64/basic/ad9e.frmevl.s | 4 + c64/basic/ae86.eval.s | 8 +- c64/basic/basic_adray1.s | 4 + c64/basic/basic_adray2.s | 4 + c64/basic/basic_delete_line.s | 5 ++ c64/basic/basic_do_error.s | 7 +- c64/basic/basic_execute_line.s | 9 +- c64/basic/basic_find_line.s | 5 ++ c64/basic/basic_find_next_line.s | 5 ++ c64/basic/basic_follow_link_to_next_line.s | 6 ++ c64/basic/basic_insert_line.s | 5 ++ c64/basic/basic_main_loop.s | 10 ++- c64/basic/basic_parse_line_number.s | 7 +- c64/basic/basic_shift_mem_down.s | 5 ++ c64/basic/basic_shift_mem_up.s | 4 + c64/basic/basic_vector_defaults.s | 8 +- c64/basic/bdcd.linprt.s | 6 +- c64/basic/c000.skip_gap.s | 5 ++ c64/basic/commands/cmd_break.s | 6 ++ c64/basic/commands/cmd_list.s | 5 +- c64/basic/commands/cmd_load.s | 10 ++- c64/basic/commands/cmd_new.s | 5 ++ c64/basic/commands/cmd_rem.s | 5 ++ c64/basic/commands/cmd_run.s | 8 +- c64/basic/commands/cmd_sys.s | 6 ++ c64/basic/commands/cmd_unimplemented.s | 5 ++ c64/basic/do_basic_error.s | 5 ++ c64/basic/e38b.error.s | 8 +- c64/basic/e3bf.init.s | 4 + c64/basic/e453.rvect.s | 4 + c64/basic/fac1_mul.s | 5 ++ c64/basic/init/a000.cold_start_vector.s | 6 +- c64/basic/init/a002.warm_start_vector.s | 7 +- c64/basic/init/basic_cold_start_internal.s | 5 ++ c64/basic/init/basic_warm_start_internal.s | 4 + c64/basic/init/e394.basic_cold_start.s | 10 ++- c64/basic/init/e3b7.basic_warm_start.jmp.s | 5 ++ c64/basic/init/e422.initmsg.jmp.s | 6 +- c64/basic/init/initmsg_bytes_free.s | 4 + c64/basic/init/initmsg_real.s | 4 + c64/basic/init/startup_banner.s | 4 + c64/basic/init_oldtxt.s | 5 ++ c64/basic/injest_comma.s | 5 ++ c64/basic/injest_number.s | 12 ++- c64/basic/pack_word.s | 5 ++ c64/basic/peek_line_pointer_null_check.s | 5 ++ c64/basic/print_integer.s | 5 ++ c64/basic/print_packed_message.s | 5 ++ c64/basic/ready_message.s | 5 ++ c64/basic/rom_revision/a004.identifier.s | 6 +- .../rom_revision/bf52.rom_revision_basic.s | 6 +- .../rom_revision/e4b7.rom_revision_kernal.s | 8 +- c64/basic/select_device.s | 9 +- c64/basic/tokenise_line.s | 4 + c64/basic/under_rom_routines.s | 5 ++ c64/basic/wedge_dos.s | 5 ++ c64/basic/wedge_tape.s | 5 ++ c64/kernal/,disabled/u64_load.s | 4 + c64/kernal/,stubs/e6b6.advance_cursor.s | 4 + c64/kernal/,stubs/e701.previous_line.s | 4 + c64/kernal/,stubs/e716.chrout_screen.s | 4 + c64/kernal/,stubs/e96c.insert_line_at_top.s | 4 + c64/kernal/,stubs/f646.iec_close.s | 5 +- c64/kernal/,stubs/fd90.unknown.s | 4 + c64/kernal/assets/cartridge_signature.s | 6 ++ c64/kernal/assets/e8da.colour_codes.s | 4 + c64/kernal/assets/fd30.vector_defaults.s | 8 +- c64/kernal/assets/irq_timing_hi.s | 4 + c64/kernal/assets/irq_timing_lo.s | 4 + c64/kernal/assets/kernal_messages.s | 4 + c64/kernal/errors.s | 12 ++- c64/kernal/iec/acptr.s | 8 +- c64/kernal/iec/chkin_iec.s | 4 + c64/kernal/iec/chrin_iec.s | 4 + c64/kernal/iec/chrout_iec.s | 4 + c64/kernal/iec/ciout.s | 8 +- c64/kernal/iec/ckout_iec.s | 4 + c64/kernal/iec/close_iec.s | 4 + c64/kernal/iec/clrchn_iec.s | 4 + c64/kernal/iec/iec_check_devnum.s | 4 + c64/kernal/iec/iec_close_load.s | 4 + c64/kernal/iec/iec_cmd_close.s | 4 + c64/kernal/iec/iec_cmd_open.s | 4 + c64/kernal/iec/iec_pull_release.s | 4 + c64/kernal/iec/iec_return.s | 4 + c64/kernal/iec/iec_rx_byte.s | 5 ++ c64/kernal/iec/iec_rx_check_eoi.s | 4 + c64/kernal/iec/iec_send_file_name.s | 4 + c64/kernal/iec/iec_set_idle.s | 4 + c64/kernal/iec/iec_turnaround_to_listen.s | 5 ++ c64/kernal/iec/iec_turnaround_to_talk.s | 5 ++ c64/kernal/iec/iec_tx_byte.s | 4 + c64/kernal/iec/iec_tx_command.s | 4 + c64/kernal/iec/iec_tx_command_finalize.s | 5 ++ c64/kernal/iec/iec_tx_flush.s | 4 + c64/kernal/iec/iec_update_eal_by_y.s | 4 + c64/kernal/iec/iec_wait1ms.s | 6 +- c64/kernal/iec/iec_wait20us.s | 4 + c64/kernal/iec/iec_wait60us.s | 4 + c64/kernal/iec/iec_wait_for_clk_release.s | 4 + c64/kernal/iec/iec_wait_for_data_pull.s | 4 + c64/kernal/iec/iec_wait_for_data_release.s | 4 + c64/kernal/iec/listen.s | 8 +- c64/kernal/iec/load_iec.s | 4 + c64/kernal/iec/open_iec.s | 4 + c64/kernal/iec/save_iec.s | 6 +- c64/kernal/iec/second.s | 8 +- c64/kernal/iec/talk.s | 8 +- c64/kernal/iec/tksa.s | 8 +- c64/kernal/iec/unlsn.s | 8 +- c64/kernal/iec/untlk.s | 10 ++- c64/kernal/iec_fast/burst_cia1_advertise.s | 4 + c64/kernal/iec_fast/burst_cia2_advertise.s | 4 + c64/kernal/iec_fast/burst_soft_advertise.s | 4 + c64/kernal/iec_fast/dolphindos_detect.s | 4 + c64/kernal/iec_fast/dolphindos_load.s | 4 + c64/kernal/iec_fast/jiffydos_bittable.s | 4 + c64/kernal/iec_fast/jiffydos_detect.s | 4 + c64/kernal/iec_fast/jiffydos_load.s | 4 + c64/kernal/iec_fast/jiffydos_prepare.s | 4 + c64/kernal/iec_fast/jiffydos_rx_byte.s | 4 + c64/kernal/iec_fast/jiffydos_tx_byte.s | 4 + c64/kernal/iec_fast/jiffydos_wait_line.s | 4 + c64/kernal/init/cartridge_check.s | 5 ++ c64/kernal/init/cint_screen_keyboard.s | 22 +++-- c64/kernal/init/e518.cint_legacy.s | 8 +- c64/kernal/init/e5a0.setup_vicii.s | 8 +- c64/kernal/init/fce2.hw_entry_reset.s | 5 ++ c64/kernal/init/fd50.ramtas.s | 14 +-- c64/kernal/init/fda3.ioinit.s | 8 +- c64/kernal/init/ff5b.cint.s | 8 +- c64/kernal/init/fffc.vector_reset.s | 5 ++ c64/kernal/init/setup_pal_ntsc.s | 6 +- .../interrupts/ea31.default_irq_handler.s | 5 ++ .../ea7e.ack_cia1_return_from_interrupt.s | 5 ++ .../interrupts/ea81.return_from_interrupt.s | 9 +- .../interrupts/fe47.default_nmi_handler.s | 10 ++- .../interrupts/fe66.default_brk_handler.s | 12 ++- c64/kernal/interrupts/fffa.vector_nmi.s | 5 ++ c64/kernal/interrupts/fffe.vector_irq.s | 5 ++ c64/kernal/interrupts/hw_entry_irq.s | 9 +- c64/kernal/interrupts/hw_entry_nmi.s | 7 +- c64/kernal/iostack/chkinout.s | 4 + c64/kernal/iostack/clall_real.s | 9 +- c64/kernal/iostack/f13e.getin.s | 8 +- c64/kernal/iostack/f157.chrin.s | 8 +- c64/kernal/iostack/f1ca.chrout.s | 10 ++- c64/kernal/iostack/f20e.chkin.s | 8 +- c64/kernal/iostack/f250.ckout.s | 18 +--- c64/kernal/iostack/f291.close.s | 10 ++- c64/kernal/iostack/f32f.clall.jmp.s | 5 ++ c64/kernal/iostack/f333.clrchn.s | 8 +- c64/kernal/iostack/f34a.open.s | 10 ++- c64/kernal/iostack/f49e.load_prep.s | 4 + c64/kernal/iostack/f4a5.load.s | 9 +- c64/kernal/iostack/f5dd.save_prep.s | 4 + c64/kernal/iostack/f5ed.save.s | 8 +- c64/kernal/iostack/findfls.s | 3 + c64/kernal/iostack/getin_real.s | 8 +- c64/kernal/iostack/load_save_common.s | 6 +- c64/kernal/iostack/readst.s | 12 ++- c64/kernal/iostack/setfls.s | 10 ++- c64/kernal/iostack/setmsg.s | 8 +- c64/kernal/iostack/setnam.s | 10 ++- c64/kernal/iostack/settmo.s | 9 +- c64/kernal/jumptable/ff81.jcint.s | 7 +- c64/kernal/jumptable/ff84.jioinit.s | 7 +- c64/kernal/jumptable/ff87.jramtas.s | 7 +- c64/kernal/jumptable/ff8a.jrestor.s | 7 +- c64/kernal/jumptable/ff8d.jvector.s | 7 +- c64/kernal/jumptable/ff90.jsetmsg.s | 7 +- c64/kernal/jumptable/ff93.jsecond.s | 7 +- c64/kernal/jumptable/ff96.jtksa.s | 7 +- c64/kernal/jumptable/ff99.jmemtop.s | 7 +- c64/kernal/jumptable/ff9c.jmembot.s | 7 +- c64/kernal/jumptable/ff9f.jscnkey.s | 7 +- c64/kernal/jumptable/ffa2.jsettmo.s | 7 +- c64/kernal/jumptable/ffa5.jacptr.s | 7 +- c64/kernal/jumptable/ffa8.jciout.s | 7 +- c64/kernal/jumptable/ffab.juntlk.s | 7 +- c64/kernal/jumptable/ffae.junlsn.s | 7 +- c64/kernal/jumptable/ffb1.jlisten.s | 7 +- c64/kernal/jumptable/ffb4.jtalk.s | 7 +- c64/kernal/jumptable/ffb7.jreadst.s | 7 +- c64/kernal/jumptable/ffba.jsetfls.s | 7 +- c64/kernal/jumptable/ffbd.jsetnam.s | 7 +- c64/kernal/jumptable/ffc0.jopen.s | 9 +- c64/kernal/jumptable/ffc3.jclose.s | 9 +- c64/kernal/jumptable/ffc6.jchkin.s | 9 +- c64/kernal/jumptable/ffc9.jckout.s | 9 +- c64/kernal/jumptable/ffcc.jclrchn.s | 9 +- c64/kernal/jumptable/ffcf.jchrin.s | 9 +- c64/kernal/jumptable/ffd2.jchrout.s | 9 +- c64/kernal/jumptable/ffd5.jload.s | 7 +- c64/kernal/jumptable/ffd8.jsave.s | 7 +- c64/kernal/jumptable/ffdb.jsettim.s | 7 +- c64/kernal/jumptable/ffde.jrdtim.s | 7 +- c64/kernal/jumptable/ffe1.jstop.s | 9 +- c64/kernal/jumptable/ffe4.jgetin.s | 9 +- c64/kernal/jumptable/ffe7.jclall.s | 7 +- c64/kernal/jumptable/ffea.judtim.s | 5 ++ c64/kernal/jumptable/ffed.jscreen.s | 5 ++ c64/kernal/jumptable/fff0.jplot.s | 5 ++ c64/kernal/jumptable/fff3.jiobase.s | 7 +- c64/kernal/keyboard/chrin_keyboard.s | 4 + c64/kernal/keyboard/f142.getin_keyboard.s | 4 + c64/kernal/keyboard/f6ed.stop.s | 10 ++- c64/kernal/keyboard/kb_matrix.s | 8 +- c64/kernal/keyboard/kb_matrix_128.s | 6 +- c64/kernal/keyboard/kb_matrix_65.s | 4 + c64/kernal/keyboard/kb_matrix_alwaysrepeat.s | 6 +- c64/kernal/keyboard/kb_matrix_bucky.s | 8 +- c64/kernal/keyboard/kb_matrix_bucky_filter.s | 6 +- c64/kernal/keyboard/kb_matrix_joy.s | 4 + c64/kernal/keyboard/kb_matrix_lookup.s | 4 + c64/kernal/keyboard/kb_matrix_lookup_legacy.s | 4 + c64/kernal/keyboard/kb_matrix_row_keys.s | 6 +- c64/kernal/keyboard/kb_matrix_row_offsets.s | 4 + c64/kernal/keyboard/keyboard_disconnect.s | 4 + c64/kernal/keyboard/pop_keyboard_buffer.s | 4 + c64/kernal/keyboard/programmable_keys.s | 4 + c64/kernal/keyboard/scnkey.s | 8 +- c64/kernal/keyboard/scnkey_128.s | 6 +- c64/kernal/keyboard/scnkey_65.s | 6 +- c64/kernal/keyboard/scnkey_legacy.s | 8 +- c64/kernal/keyboard/scnkey_set_keytab.s | 6 +- c64/kernal/keyboard/udtim_keyboard.s | 4 + c64/kernal/memory/fd15.restor.s | 8 +- c64/kernal/memory/fe25.memtop.s | 8 +- c64/kernal/memory/membot.s | 8 +- c64/kernal/memory/under_rom_routines.s | 5 ++ c64/kernal/memory/vector_real.s | 6 +- c64/kernal/panic.s | 4 + c64/kernal/print/print_features.s | 4 + c64/kernal/print/print_hex_byte.s | 4 + c64/kernal/print/print_kernal_message.s | 4 + c64/kernal/print/print_pal_ntsc.s | 6 +- c64/kernal/print/print_return.s | 4 + c64/kernal/print/print_space.s | 4 + c64/kernal/print/printf.s | 4 + .../rom_revision/ff80.kernal_revision.s | 7 +- c64/kernal/rs232/chkin_rs232_up2400.s | 4 + c64/kernal/rs232/chkin_rs232_up9600.s | 5 ++ c64/kernal/rs232/chrin_rs232_up2400.s | 4 + c64/kernal/rs232/chrin_rs232_up9600.s | 4 + c64/kernal/rs232/chrout_rs232.s | 4 + c64/kernal/rs232/ckout_rs232_up2400.s | 4 + c64/kernal/rs232/ckout_rs232_up9600.s | 4 + c64/kernal/rs232/close_rs232.s | 4 + c64/kernal/rs232/getin_rs232.s | 4 + c64/kernal/rs232/open_rs232.s | 4 + c64/kernal/rs232/rs232_count_channels.s | 4 + c64/kernal/rs232/up9600_disable.s | 4 + c64/kernal/rs232/up9600_enable.s | 6 +- c64/kernal/rs232/up9600_ihitab.s | 4 + c64/kernal/rs232/up9600_ilotab.s | 4 + c64/kernal/rs232/up9600_irq.s | 4 + c64/kernal/rs232/up9600_nmi.s | 4 + c64/kernal/rs232/up9600_rsin.s | 4 + c64/kernal/rs232/up9600_rsout.s | 4 + c64/kernal/screen/chrout_screen.s | 4 + c64/kernal/screen/chrout_screen_clr.s | 5 ++ c64/kernal/screen/chrout_screen_control.s | 4 + c64/kernal/screen/chrout_screen_crsr.s | 4 + c64/kernal/screen/chrout_screen_del.s | 4 + c64/kernal/screen/chrout_screen_gfxtxt.s | 4 + c64/kernal/screen/chrout_screen_home.s | 4 + c64/kernal/screen/chrout_screen_ins.s | 4 + .../screen/chrout_screen_jumptable_codes.s | 4 + c64/kernal/screen/chrout_screen_quote.s | 4 + c64/kernal/screen/chrout_screen_return.s | 4 + c64/kernal/screen/chrout_screen_rvs.s | 4 + c64/kernal/screen/chrout_screen_shift_onoff.s | 4 + c64/kernal/screen/chrout_screen_stop.s | 4 + c64/kernal/screen/chrout_screen_tab.s | 4 + c64/kernal/screen/cursor.s | 4 + c64/kernal/screen/cursor_enable.s | 4 + c64/kernal/screen/cursor_show.s | 4 + c64/kernal/screen/e50a.plot.s | 8 +- c64/kernal/screen/e544.clear_screen.s | 4 + c64/kernal/screen/e566.cursor_home.s | 4 + .../screen/e56c.screen_calculate_pnt_user.s | 4 + c64/kernal/screen/e8ea.screen_scroll_up.s | 4 + c64/kernal/screen/e9ff.screen_clear_line.s | 4 + c64/kernal/screen/screen.s | 4 + .../screen/screen_advance_to_next_line.s | 4 + .../screen/screen_calculate_pntr_lnmx.s | 4 + .../screen/screen_check_space_ends_line.s | 4 + c64/kernal/screen/screen_code_to_petscii.s | 5 ++ c64/kernal/screen/screen_get_cliped_pntr.s | 4 + .../screen/screen_get_logical_line_end_ptr.s | 6 +- c64/kernal/screen/screen_grow_logical_line.s | 4 + c64/kernal/screen/screen_off.s | 4 + c64/kernal/screen/screen_on.s | 4 + c64/kernal/screen/screen_preserve_sal_eal.s | 4 + c64/kernal/screen/screen_restore_sal_eal.s | 4 + c64/kernal/tape/load_tape_normal.s | 4 + c64/kernal/tape/load_tape_turbo.s | 4 + c64/kernal/tape/tape_common.s | 4 + c64/kernal/tape/tape_common_clean_sid.s | 4 + c64/kernal/tape/tape_common_ditch_verify.s | 4 + c64/kernal/tape/tape_common_motor.s | 4 + c64/kernal/tape/tape_common_screen.s | 4 + c64/kernal/tape/tape_normal_get_bit.s | 4 + c64/kernal/tape/tape_normal_get_byte.s | 4 + c64/kernal/tape/tape_normal_get_data.s | 4 + c64/kernal/tape/tape_normal_get_marker.s | 5 ++ c64/kernal/tape/tape_normal_get_pulse.s | 5 ++ c64/kernal/tape/tape_normal_pilot.s | 5 ++ c64/kernal/tape/tape_normal_sync.s | 4 + c64/kernal/tape/tape_turbo_bytestore.s | 4 + c64/kernal/tape/tape_turbo_get_bit.s | 4 + c64/kernal/tape/tape_turbo_get_byte.s | 4 + c64/kernal/tape/tape_turbo_sync.s | 4 + c64/kernal/time/rdtim.s | 9 +- c64/kernal/time/settim.s | 9 +- c64/kernal/time/udtim.s | 8 +- src/build_segment.cc | 10 ++- 333 files changed, 1747 insertions(+), 289 deletions(-) diff --git a/Makefile b/Makefile index 1071b379..c5a6c117 100644 --- a/Makefile +++ b/Makefile @@ -55,11 +55,19 @@ TOOLS_LIST = $(pathsubst src/tools/%,build/tools/%,$(basename $(SRC_TOOLS))) # List of targets -STD_TARGET_LIST = build/kernal_custom.rom build/basic_custom.rom \ - build/kernal_generic.rom build/basic_generic.rom \ - build/kernal_testing.rom build/basic_testing.rom \ - build/kernal_mega65.rom build/basic_mega65.rom \ - build/kernal_ultimate64.rom build/basic_ultimate64.rom \ +STD_TARGET_LIST_CUSTOM = build/kernal_custom.rom build/basic_custom.rom +STD_TARGET_LIST_GENERIC = build/kernal_generic.rom build/basic_generic.rom +STD_TARGET_LIST_TESTING = build/kernal_testing.rom build/basic_testing.rom +STD_TARGET_LIST_ULTIMATE64 = build/kernal_ultimate64.rom build/basic_ultimate64.rom +STD_TARGET_LIST_MEGA65 = build/kernal_mega65.rom_0 \ + build/kernal_mega65.rom_1 \ + build/basic_mega65.rom_0 + +STD_TARGET_LIST = $(STD_TARGET_LIST_CUSTOM) \ + $(STD_TARGET_LIST_GENERIC) \ + $(STD_TARGET_LIST_TESTING) \ + $(STD_TARGET_LIST_MEGA65) \ + $(STD_TARGET_LIST_ULTIMATE64) \ build/chargen.rom EXT_TARGET_LIST = build/mega65.rom @@ -126,9 +134,9 @@ build/target_testing/OUTB.BIN build/target_testing/BASIC_combined.vs: \ $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(GEN_BASIC) $(SRCDIR_BASIC) \ c64/,,config_testing.s build/target_testing/KERNAL_combined.sym \ $(foreach dir,$(SRCDIR_BASIC),$(wildcard $(dir)/*.s)) -build/target_mega65/OUTB.BIN build/target_mega65/BASIC_combined.vs: \ +build/target_mega65/OUTB_0.BIN build/target_mega65/BASIC_0_combined.vs: \ $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(GEN_BASIC) $(SRCDIR_BASIC) \ - c64/,,config_mega65.s build/target_mega65/KERNAL_combined.sym \ + c64/,,config_mega65.s build/target_mega65/KERNAL_0_combined.sym \ $(foreach dir,$(SRCDIR_BASIC),$(wildcard $(dir)/*.s)) build/target_ultimate64/OUTB.BIN build/target_ultimate64/BASIC_combined.vs: \ $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(GEN_BASIC) $(SRCDIR_BASIC) \ @@ -147,37 +155,41 @@ build/target_testing/OUTK.BIN build/target_testing/KERNAL_combined.vs bu $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(GEN_KERNAL) $(SRCDIR_KERNAL) \ c64/,,config_testing.s \ $(foreach dir,$(SRCDIR_KERNAL),$(wildcard $(dir)/*.s)) -build/target_mega65/OUTK.BIN build/target_mega65/KERNAL_combined.vs build/target_mega65/KERNAL_combined.sym: \ +build/target_mega65/OUTK_0.BIN build/target_mega65/KERNAL_0_combined.vs build/target_mega65/KERNAL_0_combined.sym: \ $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(GEN_KERNAL) $(SRCDIR_KERNAL) \ c64/,,config_mega65.s \ $(foreach dir,$(SRCDIR_KERNAL),$(wildcard $(dir)/*.s)) +build/target_mega65/OUTK_1.BIN build/target_mega65/KERNAL_1_combined.vs build/target_mega65/KERNAL_1_combined.sym: \ + $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(GEN_KERNAL) $(SRCDIR_KERNAL) \ + c64/,,config_mega65.s \ + $(foreach dir,$(SRCDIR_KERNAL),$(wildcard $(dir)/*.s)) build/target_ultimate64/OUTK.BIN build/target_ultimate64/KERNAL_combined.vs build/target_ultimate64/KERNAL_combined.sym: \ $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(GEN_KERNAL) $(SRCDIR_KERNAL) \ c64/,,config_ultimate64.s \ $(foreach dir,$(SRCDIR_KERNAL),$(wildcard $(dir)/*.s)) -build/target_custom/newrom: build/target_custom/OUTB.BIN build/target_custom/OUTK.BIN -build/target_generic/newrom: build/target_generic/OUTB.BIN build/target_generic/OUTK.BIN -build/target_testing/newrom: build/target_testing/OUTB.BIN build/target_testing/OUTK.BIN -build/target_mega65/newrom: build/target_mega65/OUTB.BIN build/target_mega65/OUTK.BIN -build/target_ultimate64/newrom: build/target_ultimate64/OUTB.BIN build/target_ultimate64/OUTK.BIN +build/target_custom/newrom: build/target_custom/OUTB.BIN build/target_custom/OUTK.BIN +build/target_generic/newrom: build/target_generic/OUTB.BIN build/target_generic/OUTK.BIN +build/target_testing/newrom: build/target_testing/OUTB.BIN build/target_testing/OUTK.BIN +build/target_mega65/newrom_0: build/target_mega65/OUTB_0.BIN build/target_mega65/OUTK_0.BIN +build/target_ultimate64/newrom: build/target_ultimate64/OUTB.BIN build/target_ultimate64/OUTK.BIN build/kernal_custom.rom: build/target_custom/newrom build/kernal_generic.rom: build/target_generic/newrom build/kernal_testing.rom: build/target_testing/newrom -build/kernal_mega65.rom: build/target_mega65/newrom +build/kernal_mega65.rom_0: build/target_mega65/newrom_0 build/kernal_ultimate64.rom: build/target_ultimate64/newrom build/basic_custom.rom: build/target_custom/newrom build/basic_generic.rom: build/target_generic/newrom build/basic_testing.rom: build/target_testing/newrom -build/basic_mega65.rom: build/target_mega65/newrom +build/basic_mega65.rom_0: build/target_mega65/newrom_0 build/basic_ultimate64.rom: build/target_ultimate64/newrom build/symbols_custom.vs: build/target_custom/BASIC_combined.vs build/target_custom/KERNAL_combined.vs build/symbols_generic.vs: build/target_generic/BASIC_combined.vs build/target_generic/KERNAL_combined.vs build/symbols_testing.vs: build/target_testing/BASIC_combined.vs build/target_testing/KERNAL_combined.vs -build/symbols_mega65.vs: build/target_mega65/BASIC_combined.vs build/target_mega65/KERNAL_combined.vs +build/symbols_mega65_0.vs: build/target_mega65/BASIC_0_combined.vs build/target_mega65/KERNAL_0_combined.vs build/symbols_ultimate64.vs: build/target_ultimate64/BASIC_combined.vs build/target_ultimate64/KERNAL_combined.vs # Rules - BASIC and KERNAL @@ -190,13 +202,29 @@ build/,generated/packed_messages.s: $(TOOL_COMPRESS_TEXT) build/target_%/OUTB.BIN build/target_%/BASIC_combined.vs: @mkdir -p build/target_$* @rm -f $@* build/target_$*/BASIC* - @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -s BASIC -i BASIC-$* -o OUTB.BIN -d build/target_$* -l a000 -h e4d2 c64/,,config_$*.s $(SRCDIR_BASIC) $(GEN_BASIC) + @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r STD -s BASIC -i BASIC-$* -o OUTB.BIN -d build/target_$* -l a000 -h e4d2 c64/,,config_$*.s $(SRCDIR_BASIC) $(GEN_BASIC) .PRECIOUS: build/target_%/OUTK.BIN build/target_%/KERNAL_combined.vs build/target_%/KERNAL_combined.sym build/target_%/OUTK.BIN build/target_%/KERNAL_combined.vs build/target_%/KERNAL_combined.sym: @mkdir -p build/target_$* @rm -f $@* build/target_$*/KERNAL* - @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -s KERNAL -i KERNAL-$* -o OUTK.BIN -d build/target_$* -l e4d3 -h ffff c64/,,config_$*.s $(SRCDIR_KERNAL) $(GEN_KERNAL) + @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r STD -s KERNAL -i KERNAL-$* -o OUTK.BIN -d build/target_$* -l e4d3 -h ffff c64/,,config_$*.s $(SRCDIR_KERNAL) $(GEN_KERNAL) + +build/target_mega65/OUTB_0.BIN build/target_mega65/BASIC_0_combined.vs: + @mkdir -p build/target_mega65 + @rm -f $@* build/target_mega65/BASIC_0* + @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s BASIC_0 -i BASIC_0-mega65 -o OUTB_0.BIN -d build/target_mega65 -l a000 -h e4d2 c64/,,config_mega65.s $(SRCDIR_BASIC) $(GEN_BASIC) + +build/target_mega65/OUTK_0.BIN build/target_mega65/KERNAL_0_combined.vs build/target_mega65/KERNAL_0_combined.sym: + @mkdir -p build/target_mega65 + @rm -f $@* build/target_mega65/KERNAL_0* + @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s KERNAL_0 -i KERNAL_0-mega65 -o OUTK_0.BIN -d build/target_mega65 -l e4d3 -h ffff c64/,,config_mega65.s $(SRCDIR_KERNAL) $(GEN_KERNAL) + +build/kernal_mega65.rom_1 build/target_mega65/OUTK_1.BIN build/target_mega65/KERNAL_1_combined.vs build/target_mega65/KERNAL_1_combined.sym: + @mkdir -p build/target_mega65 + @rm -f $@* build/kernal_mega65.rom_1 build/target_mega65/KERNAL_1* + @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s KERNAL_1 -i KERNAL_1-mega65 -o OUTK_1.BIN -d build/target_mega65 -l 4000 -h 7fff c64/,,config_mega65.s $(SRCDIR_KERNAL) $(GEN_KERNAL) + @cp build/target_mega65/OUTK_1.BIN build/kernal_mega65.rom_1 .PRECIOUS: build/target_%/newrom build/target_%/newrom: @@ -214,6 +242,15 @@ build/basic_%.rom: build/symbols_%.vs: sort build/target_$*/BASIC_combined.vs build/target_$*/KERNAL_combined.vs | uniq | grep -v "__" > $@ +build/target_mega65/newrom_0: + cat build/target_mega65/OUTB_0.BIN build/target_mega65/OUTK_0.BIN > $@ + +build/kernal_mega65.rom_0: + dd if=build/target_mega65/newrom_0 bs=8192 count=1 skip=2 of=$@ + +build/basic_mega65.rom_0: + dd if=build/target_mega65/newrom_0 bs=8192 count=1 skip=0 of=$@ + build/kernal_hybrid.rom: kernal build/target_generic/OUTK.BIN @echo @echo $(HYBRID_WARNING) @@ -228,12 +265,14 @@ build/symbols_hybrid.vs: build/target_generic/KERNAL_combined.vs # Rules - platform 'Mega 65' specific -build/mega65.rom: build/kernal_mega65.rom build/basic_mega65.rom build/chargen.rom - dd if=/dev/zero bs=4096 count=10 of=build/mega65.rom - cat build/basic_mega65.rom build/chargen.rom build/chargen.rom build/kernal_mega65.rom >> build/mega65.rom - dd if=/dev/zero bs=65536 count=1 of=build/padding - cat build/padding >> build/mega65.rom - rm -f build/padding +build/mega65.rom: build/kernal_0_mega65.rom build/target_mega65/OUTK_1.BIN build/basic_mega65.rom build/chargen.rom + cat build/target_mega65/OUTK_1.BIN > build/mega65.rom + dd if=/dev/zero bs=4096 count=6 of=build/padding1 + cat build/padding1 >> build/mega65.rom + cat build/basic_mega65.rom build/chargen.rom build/chargen.rom build/kernal_0_mega65.rom >> build/mega65.rom + dd if=/dev/zero bs=4096 count=16 of=build/padding2 + cat build/padding2 >> build/mega65.rom + rm -f build/padding* # Rules - tests @@ -256,9 +295,6 @@ test_generic_x128: build/kernal_generic.rom build/basic_generic.rom build/symbol test_testing: build/kernal_testing.rom build/basic_testing.rom build/symbols_testing.vs x64 -kernal build/kernal_testing.rom -basic build/basic_testing.rom -moncommands build/symbols_testing.vs -1 $(TESTTAPE) -8 $(TESTDISK) -test_mega65_vice: build/kernal_mega65.rom build/basic_mega65.rom build/symbols_mega65.vs - x64 -kernal build/kernal_mega65.rom -basic build/basic_mega65.rom -moncommands build/symbols_mega65.vs -1 $(TESTTAPE) -8 $(TESTDISK) - test_mega65: build/mega65.rom ../xemu/build/bin/xmega65.native -dmarev 2 -forcerom -loadrom build/mega65.rom diff --git a/c64/basic/,aliases.s b/c64/basic/,aliases.s index 2726f748..37741819 100644 --- a/c64/basic/,aliases.s +++ b/c64/basic/,aliases.s @@ -1,3 +1,4 @@ + // // Helper aliases to make the code more readable // Always use double underscore in label names diff --git a/c64/basic/,imports.s b/c64/basic/,imports.s index 525459f4..ebcf56c9 100644 --- a/c64/basic/,imports.s +++ b/c64/basic/,imports.s @@ -1,28 +1,42 @@ // Routines imported from Kernal - our private API -#import "KERNAL_combined.sym" +#if ROM_LAYOUT_STD + #import "KERNAL_combined.sym" +#else + #import "KERNAL_0_combined.sym" +#endif + + +.function KERNAL() +{ +#if ROM_LAYOUT_STD + .return KERNAL +#else + .return KERNAL_0 +#endif +} #if CONFIG_PANIC_SCREEN -.label panic = KERNAL.panic +.label panic = KERNAL().panic #endif -.label hw_entry_reset = KERNAL.hw_entry_reset +.label hw_entry_reset = KERNAL().hw_entry_reset #if CONFIG_DBG_PRINTF -.label printf = KERNAL.printf +.label printf = KERNAL().printf #endif -.label plot_set = KERNAL.plot_set -.label print_hex_byte = KERNAL.print_hex_byte -.label print_return = KERNAL.print_return -.label print_space = KERNAL.print_space +.label plot_set = KERNAL().plot_set +.label print_hex_byte = KERNAL().print_hex_byte +.label print_return = KERNAL().print_return +.label print_space = KERNAL().print_space #if CONFIG_SHOW_FEATURES -.label print_features = KERNAL.print_features +.label print_features = KERNAL().print_features #endif #if CONFIG_SHOW_PAL_NTSC -.label print_pal_ntsc = KERNAL.print_pal_ntsc +.label print_pal_ntsc = KERNAL().print_pal_ntsc #endif diff --git a/c64/basic/a408.reason.s b/c64/basic/a408.reason.s index f7613215..cc75fcb8 100644 --- a/c64/basic/a408.reason.s +++ b/c64/basic/a408.reason.s @@ -1,5 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // XXX provide documentation and implementation REASON: STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/basic/a453.unknown.s b/c64/basic/a453.unknown.s index ecb53d23..1aef3f04 100644 --- a/c64/basic/a453.unknown.s +++ b/c64/basic/a453.unknown.s @@ -1,4 +1,8 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // XXX provide documentation and implementation - STUB_IMPLEMENTATION() \ No newline at end of file + STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/basic/a483.main.s b/c64/basic/a483.main.s index 40415b24..f15fd4d2 100644 --- a/c64/basic/a483.main.s +++ b/c64/basic/a483.main.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // // Official BASIC routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - XXX -// - [CM64] Compute's Mapping the Commodore 64 - page 69, XXX +// - [RG64] C64 Programmers Reference Guide - XXX +// - [CM64] Computes Mapping the Commodore 64 - page 69, XXX // // CPU registers that has to be preserved (see [RG64]): XXX // @@ -11,3 +12,6 @@ MAIN: STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/basic/a533.linkprg.s b/c64/basic/a533.linkprg.s index 675a794e..fabfd806 100644 --- a/c64/basic/a533.linkprg.s +++ b/c64/basic/a533.linkprg.s @@ -1,8 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // // Well-known BASIC routine, described in: // -// - [CM64] Compute's Mapping the Commodore 64 - page 95 +// - [CM64] Computes Mapping the Commodore 64 - page 95 // - https://www.lemon64.com/forum/viewtopic.php?t=64721&sid=bc400a5a6d404f8f092e4d32a92f5de7 // @@ -89,3 +90,6 @@ linkprg_end_of_line_search: sta OLDTXT+0 jmp linkprg_loop + + +#endif // ROM layout diff --git a/c64/basic/a57c.chrnch.s b/c64/basic/a57c.chrnch.s index 4f462ff6..61e459bb 100644 --- a/c64/basic/a57c.chrnch.s +++ b/c64/basic/a57c.chrnch.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // // Official BASIC routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - XXX -// - [CM64] Compute's Mapping the Commodore 64 - page 69, XXX +// - [RG64] C64 Programmers Reference Guide - XXX +// - [CM64] Computes Mapping the Commodore 64 - page 69, XXX // // CPU registers that has to be preserved (see [RG64]): XXX // @@ -11,3 +12,6 @@ CHRNCH: STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/basic/a644.new.s b/c64/basic/a644.new.s index e4e54f59..0e99bcdb 100644 --- a/c64/basic/a644.new.s +++ b/c64/basic/a644.new.s @@ -1,5 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // XXX provide documentation and real implementation new: STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/basic/a659.setcharptr.s b/c64/basic/a659.setcharptr.s index b7383332..d0c6dc75 100644 --- a/c64/basic/a659.setcharptr.s +++ b/c64/basic/a659.setcharptr.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // XXX provide documentation and implementation // see: https://www.lemon64.com/forum/viewtopic.php?t=64721&sid=bc400a5a6d404f8f092e4d32a92f5de7 @@ -5,3 +6,6 @@ setcharptr: STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/basic/a68e.runc.s b/c64/basic/a68e.runc.s index 5daa4b22..13fe9092 100644 --- a/c64/basic/a68e.runc.s +++ b/c64/basic/a68e.runc.s @@ -1,7 +1,8 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // Well-known BASIC routine, described in: // -// - [CM64] Compute's Mapping the Commodore 64 - page 97 +// - [CM64] Computes Mapping the Commodore 64 - page 97 // - https://www.c64-wiki.com/wiki/BASIC-ROM // - https://csdb.dk/forums/?roomid=11&topicid=137233 // @@ -13,7 +14,7 @@ RUNC: // But CSDB claims, that it should 'set current character pointer to start of basic - 1' - this // looks sane, also checked that the original BASIC routine does this (short test program) - // Let's initialize TXTPTR using TXTTAB + // Lets initialize TXTPTR using TXTTAB lda TXTTAB+0 sec @@ -25,3 +26,6 @@ RUNC: sta TXTPTR+1 rts + + +#endif // ROM layout diff --git a/c64/basic/a71a.qplop.s b/c64/basic/a71a.qplop.s index efa99f31..6613fc99 100644 --- a/c64/basic/a71a.qplop.s +++ b/c64/basic/a71a.qplop.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // // Official BASIC routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - XXX -// - [CM64] Compute's Mapping the Commodore 64 - page 69, XXX +// - [RG64] C64 Programmers Reference Guide - XXX +// - [CM64] Computes Mapping the Commodore 64 - page 69, XXX // // CPU registers that has to be preserved (see [RG64]): XXX // @@ -11,3 +12,6 @@ QPLOP: STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/basic/a7ae.newstt.s b/c64/basic/a7ae.newstt.s index 6dde6ca2..152e22ab 100644 --- a/c64/basic/a7ae.newstt.s +++ b/c64/basic/a7ae.newstt.s @@ -1,18 +1,22 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // Well-known BASIC routine, described in: // -// - [CM64] Compute's Mapping the Commodore 64 - page 97 +// - [CM64] Computes Mapping the Commodore 64 - page 97 // - https://www.lemon64.com/forum/viewtopic.php?t=64721&sid=bc400a5a6d404f8f092e4d32a92f5de7 // - https://www.lemon64.com/forum/viewtopic.php?t=70680&sid=3ff66caf7f5fdf2a3c2ff2ee31fc3fd8 // - https://codebase64.org/doku.php?id=base:assembling_your_own_cart_rom_image NEWSTT: - // XXX Real implementation is more complicated, it's actually a part + // XXX Real implementation is more complicated, it iss actually a part // of the BASIC main loop. It is, however, often called by various // utilities to simply run the software which was just loaded or // uncompressed. - // For now, let's cheat a little - this should provide some compatibility: + // For now, lets cheat a little - this should provide some compatibility: jmp cmd_run + + +#endif // ROM layout diff --git a/c64/basic/a7e4.gone.s b/c64/basic/a7e4.gone.s index 547f648a..9d598298 100644 --- a/c64/basic/a7e4.gone.s +++ b/c64/basic/a7e4.gone.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // // Official BASIC routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - XXX -// - [CM64] Compute's Mapping the Commodore 64 - page 70, XXX +// - [RG64] C64 Programmers Reference Guide - XXX +// - [CM64] Computes Mapping the Commodore 64 - page 70, XXX // // CPU registers that has to be preserved (see [RG64]): XXX // @@ -11,3 +12,6 @@ GONE: STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/basic/ab1e.strout.s b/c64/basic/ab1e.strout.s index 4ad77a99..01da716d 100644 --- a/c64/basic/ab1e.strout.s +++ b/c64/basic/ab1e.strout.s @@ -1,5 +1,7 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // Print string at $YYAA -// Compute's Mapping the 64 p101 +// Computes Mapping the 64 p101 // print string routine @@ -31,3 +33,6 @@ STROUT: pla // XXX can we use plx_trash_a here? tax rts + + +#endif // ROM layout diff --git a/c64/basic/ad9e.frmevl.s b/c64/basic/ad9e.frmevl.s index 2b41983e..a63ec8b2 100644 --- a/c64/basic/ad9e.frmevl.s +++ b/c64/basic/ad9e.frmevl.s @@ -1,5 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // XXX provide documentation and implementation FRMEVL: STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/basic/ae86.eval.s b/c64/basic/ae86.eval.s index 423eb01a..b2bf858d 100644 --- a/c64/basic/ae86.eval.s +++ b/c64/basic/ae86.eval.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // // Official BASIC routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - XXX -// - [CM64] Compute's Mapping the Commodore 64 - page 70, XXX +// - [RG64] C64 Programmers Reference Guide - XXX +// - [CM64] Computes Mapping the Commodore 64 - page 70, XXX // // CPU registers that has to be preserved (see [RG64]): XXX // @@ -11,3 +12,6 @@ EVAL: STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/basic/basic_adray1.s b/c64/basic/basic_adray1.s index 879a6bce..c23e0256 100644 --- a/c64/basic/basic_adray1.s +++ b/c64/basic/basic_adray1.s @@ -1,5 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // XXX provide documentation and implementation basic_adray1: STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/basic/basic_adray2.s b/c64/basic/basic_adray2.s index dbdd00c1..32bfc72f 100644 --- a/c64/basic/basic_adray2.s +++ b/c64/basic/basic_adray2.s @@ -1,5 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // XXX provide documentation and implementation basic_adray2: STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/basic/basic_delete_line.s b/c64/basic/basic_delete_line.s index 33a3d5b5..2da34969 100644 --- a/c64/basic/basic_delete_line.s +++ b/c64/basic/basic_delete_line.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // Delete the current BASIC line, which is assumed to have already // been found with basic_find_line. // Really only consists of copying memory down. @@ -80,3 +82,6 @@ basic_delete_line: clc rts + + +#endif // ROM layout diff --git a/c64/basic/basic_do_error.s b/c64/basic/basic_do_error.s index e4525fc6..e3ef4bec 100644 --- a/c64/basic/basic_do_error.s +++ b/c64/basic/basic_do_error.s @@ -1,4 +1,6 @@ -// Compute's Mapping the 64 p93 +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + +// Computes Mapping the 64 p93 basic_do_error: // Save error number @@ -29,3 +31,6 @@ basic_do_error: ldx #$FE txs jmp basic_main_loop + + +#endif // ROM layout diff --git a/c64/basic/basic_execute_line.s b/c64/basic/basic_execute_line.s index e8c2c191..81064f46 100644 --- a/c64/basic/basic_execute_line.s +++ b/c64/basic/basic_execute_line.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // Jump back into the BASIC execute line loop // after first checking that we have a colon // or $00 char @@ -87,7 +89,7 @@ basic_execute_statement: cmp #$7f bcc not_a_token - // It's a token: So get the jump table entry for it, push it on the stack + // It is a token: So get the jump table entry for it, push it on the stack // and then RTS to start it. asl tax @@ -112,7 +114,7 @@ not_a_token: cmp #$3a beq basic_skip_char - // If all else fails, it's a syntax error + // If all else fails, it is a syntax error jmp do_SYNTAX_error basic_skip_char: @@ -365,3 +367,6 @@ basic_command_jump_table: .word cmd_unimplemented-1 .word cmd_unimplemented-1 .word cmd_unimplemented-1 + + +#endif // ROM layout diff --git a/c64/basic/basic_find_line.s b/c64/basic/basic_find_line.s index 3f9ec214..cc35e1bb 100644 --- a/c64/basic/basic_find_line.s +++ b/c64/basic/basic_find_line.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // Find the BASIC line with number LINNUM @@ -79,3 +81,6 @@ more_lines_exist: sta OLDTXT+0 jmp basic_find_line_loop + + +#endif // ROM layout diff --git a/c64/basic/basic_find_next_line.s b/c64/basic/basic_find_next_line.s index c3b86d1d..fc2f5b97 100644 --- a/c64/basic/basic_find_next_line.s +++ b/c64/basic/basic_find_next_line.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // Advance OLDTXT by following the // link to the next line @@ -25,3 +27,6 @@ basic_find_next_line: pla sta OLDTXT+0 rts + + +#endif // ROM layout diff --git a/c64/basic/basic_follow_link_to_next_line.s b/c64/basic/basic_follow_link_to_next_line.s index 1a9b138c..5b32eae9 100644 --- a/c64/basic/basic_follow_link_to_next_line.s +++ b/c64/basic/basic_follow_link_to_next_line.s @@ -1,3 +1,6 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + + basic_follow_link_to_next_line: ldy #0 @@ -21,3 +24,6 @@ basic_follow_link_to_next_line: pla sta OLDTXT+0 rts + + +#endif // ROM layout diff --git a/c64/basic/basic_insert_line.s b/c64/basic/basic_insert_line.s index 17153e32..9eb95955 100644 --- a/c64/basic/basic_insert_line.s +++ b/c64/basic/basic_insert_line.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // Insert the tokenised line stored at $0200. // First work out where in the list to put it // (basic_find_line with the line number can be used to work @@ -98,3 +100,6 @@ line_store_loop: clc rts + + +#endif // ROM layout diff --git a/c64/basic/basic_main_loop.s b/c64/basic/basic_main_loop.s index 55ea6dce..238a9c07 100644 --- a/c64/basic/basic_main_loop.s +++ b/c64/basic/basic_main_loop.s @@ -1,3 +1,6 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + + basic_main_loop: // XXX - Check if direct or program mode, and get next line of input @@ -24,7 +27,7 @@ read_line_loop: // Not carriage return, so try to append to line so far cpx #80 bcc !+ - // Report STRING TOO LONG error (Compute's Mapping the 64 p93) + // Report STRING TOO LONG error (Computes Mapping the 64 p93) ldx #22 jmp basic_do_error !: @@ -168,8 +171,11 @@ not_a_line: // Put invalid line number in current line number value, // so that we know we are in direct mode - // (Compute's Mapping the 64 p19) + // (Computes Mapping the 64 p19) lda #$FF sta CURLIN+1 jmp basic_execute_statement + + +#endif // ROM layout diff --git a/c64/basic/basic_parse_line_number.s b/c64/basic/basic_parse_line_number.s index c4b9910f..3e1ae801 100644 --- a/c64/basic/basic_parse_line_number.s +++ b/c64/basic/basic_parse_line_number.s @@ -1,4 +1,6 @@ - +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + + basic_parse_line_number: jsr injest_number @@ -25,3 +27,6 @@ ml_bad_line_number: sta LINNUM+1 clc rts + + +#endif // ROM layout diff --git a/c64/basic/basic_shift_mem_down.s b/c64/basic/basic_shift_mem_down.s index 8c9f5a15..2daa4fa2 100644 --- a/c64/basic/basic_shift_mem_down.s +++ b/c64/basic/basic_shift_mem_down.s @@ -1,3 +1,6 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + + basic_shift_mem_down_and_relink: // Shift memory down to basic_current_line_pointer // from X bytes further along. @@ -169,3 +172,5 @@ relink_down_loop: clc rts + +#endif // ROM layout diff --git a/c64/basic/basic_shift_mem_up.s b/c64/basic/basic_shift_mem_up.s index e01870a6..763582f2 100644 --- a/c64/basic/basic_shift_mem_up.s +++ b/c64/basic/basic_shift_mem_up.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) basic_shift_mem_up_and_relink: @@ -202,3 +203,6 @@ relink_up_loop: bcs relink_up_next_line rts + + +#endif // ROM layout diff --git a/c64/basic/basic_vector_defaults.s b/c64/basic/basic_vector_defaults.s index a12d2275..6646b345 100644 --- a/c64/basic/basic_vector_defaults.s +++ b/c64/basic/basic_vector_defaults.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // // Default values for BASIC vectors - described in: // -// - [RG64] C64 Programmer's Reference Guide - pages 68-70 -// - [CM64] Compute's Mapping the Commodore 64 - page 318 +// - [RG64] C64 Programmers Reference Guide - pages 68-70 +// - [CM64] Computes Mapping the Commodore 64 - page 318 // basic_vector_defaults_1: @@ -19,3 +20,6 @@ basic_vector_defaults_2: .word basic_adray1 // ADRAY1 .word basic_adray2 // ADRAY2 + + +#endif // ROM layout diff --git a/c64/basic/bdcd.linprt.s b/c64/basic/bdcd.linprt.s index 7e58bebe..1f104e3b 100644 --- a/c64/basic/bdcd.linprt.s +++ b/c64/basic/bdcd.linprt.s @@ -1,8 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // // Well-known BASIC routine, described in: // -// - [CM64] Compute's Mapping the Commodore 64 - page 116, XXX +// - [CM64] Computes Mapping the Commodore 64 - page 116, XXX // @@ -10,3 +11,6 @@ LINPRT: // XXX This is temporary, to allow some software to work! // To be replaced by real impleementation. jmp print_integer + + +#endif // ROM layout diff --git a/c64/basic/c000.skip_gap.s b/c64/basic/c000.skip_gap.s index 3ad7357c..5d45cdcf 100644 --- a/c64/basic/c000.skip_gap.s +++ b/c64/basic/c000.skip_gap.s @@ -1,3 +1,8 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // Skip the gap between $C000-$DFFF .fill $2000, $00 + + +#endif // ROM layout diff --git a/c64/basic/commands/cmd_break.s b/c64/basic/commands/cmd_break.s index 82909193..17673e7d 100644 --- a/c64/basic/commands/cmd_break.s +++ b/c64/basic/commands/cmd_break.s @@ -1,3 +1,6 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + + cmd_stop: ldx #30 // "BREAK" jsr print_packed_message @@ -20,3 +23,6 @@ cmd_stop: cmd_end: jmp basic_main_loop + + +#endif // ROM layout diff --git a/c64/basic/commands/cmd_list.s b/c64/basic/commands/cmd_list.s index 6cf022e5..7c79e958 100644 --- a/c64/basic/commands/cmd_list.s +++ b/c64/basic/commands/cmd_list.s @@ -1,5 +1,7 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // LIST basic text. -// XXX - Doesn't currently support line number ranges +// XXX - Does not currently support line number ranges cmd_list: @@ -148,3 +150,4 @@ list_end_of_line: jmp print_return +#endif // ROM layout diff --git a/c64/basic/commands/cmd_load.s b/c64/basic/commands/cmd_load.s index 20e2a501..70cb30df 100644 --- a/c64/basic/commands/cmd_load.s +++ b/c64/basic/commands/cmd_load.s @@ -1,3 +1,6 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + + cmd_load: // Parse filename @@ -7,7 +10,7 @@ cmd_load: // Parse optional device # // Parse optional secondary address - // XXX - C64 BASIC apparently doesn't clear variables after a LOAD in the + // XXX - C64 BASIC apparently does not clear variables after a LOAD in the // middle of a program. For safety, we do. jsr basic_do_clr @@ -77,7 +80,7 @@ got_devicenumber: sta SA jmp cmd_load_got_secondaryaddress !: - // Second parameter is above 255, this can't be a secondary address + // Second parameter is above 255, this can not be a secondary address // Use it as load address instead // XXX temporary syntax, it would be better to use something // XXX like 'LOAD"FILE",8 TO 49152' @@ -126,3 +129,6 @@ load_no_error: // XXX - should run program if LOAD was used in program mode jmp basic_main_loop + + +#endif // ROM layout diff --git a/c64/basic/commands/cmd_new.s b/c64/basic/commands/cmd_new.s index 2c3102bf..f4ddf91b 100644 --- a/c64/basic/commands/cmd_new.s +++ b/c64/basic/commands/cmd_new.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + cmd_new: jsr basic_do_new @@ -78,3 +80,6 @@ basic_do_clr: sta STREND+1 rts + + +#endif // ROM layout diff --git a/c64/basic/commands/cmd_rem.s b/c64/basic/commands/cmd_rem.s index 24af2e0b..4d6daaa9 100644 --- a/c64/basic/commands/cmd_rem.s +++ b/c64/basic/commands/cmd_rem.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // REM statement just skips to the next line cmd_rem: jmp basic_end_of_line + + +#endif // ROM layout diff --git a/c64/basic/commands/cmd_run.s b/c64/basic/commands/cmd_run.s index 6e718c81..310a4d34 100644 --- a/c64/basic/commands/cmd_run.s +++ b/c64/basic/commands/cmd_run.s @@ -1,3 +1,6 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + + cmd_run: // RUN clears all variables jsr basic_do_clr @@ -15,8 +18,11 @@ cmd_goto: jsr basic_parse_line_number jsr basic_find_line bcc !+ - // Line doesn't exist, so report error + // Line does not exist, so report error jmp do_UNDEFD_STATEMENT_error !: // Run it! jmp basic_execute_from_current_line + + +#endif // ROM layout diff --git a/c64/basic/commands/cmd_sys.s b/c64/basic/commands/cmd_sys.s index 9f1c637c..b4953c7b 100644 --- a/c64/basic/commands/cmd_sys.s +++ b/c64/basic/commands/cmd_sys.s @@ -1,3 +1,6 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + + cmd_sys: jsr basic_end_of_statement_check @@ -66,3 +69,6 @@ cmd_sys_setup_call: cmd_sys_hack_str: .byte $FF, $AC, $36, $35, $36, $00 + + +#endif // ROM layout diff --git a/c64/basic/commands/cmd_unimplemented.s b/c64/basic/commands/cmd_unimplemented.s index ffdffd96..0252f1ef 100644 --- a/c64/basic/commands/cmd_unimplemented.s +++ b/c64/basic/commands/cmd_unimplemented.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // // Default handler for all not-yet-implemented commands // @@ -154,3 +156,6 @@ cmd_go: cmd_unimplemented: jmp do_NOT_IMPLEMENTED_error + + +#endif // ROM layout diff --git a/c64/basic/do_basic_error.s b/c64/basic/do_basic_error.s index 1135e102..1e388470 100644 --- a/c64/basic/do_basic_error.s +++ b/c64/basic/do_basic_error.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // As many errors are triggered from many places in the BASIC // interprettor, it is important to have an efficicent means of // calling them. @@ -165,3 +167,6 @@ do_basic_error: // XXX - Restore stack depth first? jmp basic_main_loop + + +#endif // ROM layout diff --git a/c64/basic/e38b.error.s b/c64/basic/e38b.error.s index 43954f1d..4d270eba 100644 --- a/c64/basic/e38b.error.s +++ b/c64/basic/e38b.error.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // // Official BASIC routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - XXX -// - [CM64] Compute's Mapping the Commodore 64 - page 69, XXX +// - [RG64] C64 Programmers Reference Guide - XXX +// - [CM64] Computes Mapping the Commodore 64 - page 69, XXX // // CPU registers that has to be preserved (see [RG64]): XXX // @@ -11,3 +12,6 @@ ERROR: STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/basic/e3bf.init.s b/c64/basic/e3bf.init.s index 884154f6..9c63859d 100644 --- a/c64/basic/e3bf.init.s +++ b/c64/basic/e3bf.init.s @@ -1,5 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // XXX provide documentation and implementation INIT: STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/basic/e453.rvect.s b/c64/basic/e453.rvect.s index 916e26fd..cc58e236 100644 --- a/c64/basic/e453.rvect.s +++ b/c64/basic/e453.rvect.s @@ -1,5 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // XXX provide documentation and implementation RVECT: STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/basic/fac1_mul.s b/c64/basic/fac1_mul.s index 4b60948f..cd14ce64 100644 --- a/c64/basic/fac1_mul.s +++ b/c64/basic/fac1_mul.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // Multiply Floating Point Accumulator by 10 // = 8x + 2x // Implement by shifting MAC left one bit, @@ -95,3 +97,6 @@ f1md2_l1: dey bpl f1md2_l1 rts + + +#endif // ROM layout diff --git a/c64/basic/init/a000.cold_start_vector.s b/c64/basic/init/a000.cold_start_vector.s index 7ed2cb76..7a02167a 100644 --- a/c64/basic/init/a000.cold_start_vector.s +++ b/c64/basic/init/a000.cold_start_vector.s @@ -1,4 +1,8 @@ -// Compute's Mapping the C64 p88 +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + +// Computes Mapping the C64 p88 .word basic_cold_start + +#endif // ROM layout diff --git a/c64/basic/init/a002.warm_start_vector.s b/c64/basic/init/a002.warm_start_vector.s index 63c4d2a5..f909e6b7 100644 --- a/c64/basic/init/a002.warm_start_vector.s +++ b/c64/basic/init/a002.warm_start_vector.s @@ -1,3 +1,8 @@ -// Compute's Mapping the C64 p88 +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + +// Computes Mapping the C64 p88 .word basic_warm_start + + +#endif // ROM layout diff --git a/c64/basic/init/basic_cold_start_internal.s b/c64/basic/init/basic_cold_start_internal.s index a7326089..139e12a6 100644 --- a/c64/basic/init/basic_cold_start_internal.s +++ b/c64/basic/init/basic_cold_start_internal.s @@ -1,8 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // // Continuation of the BASIC cold start routine // + basic_cold_start_internal: // Setup vectors at $300 @@ -34,3 +36,6 @@ basic_cold_start_internal: // jump into warm start loop jmp basic_warm_start + + +#endif // ROM layout diff --git a/c64/basic/init/basic_warm_start_internal.s b/c64/basic/init/basic_warm_start_internal.s index b271b928..be115d9e 100644 --- a/c64/basic/init/basic_warm_start_internal.s +++ b/c64/basic/init/basic_warm_start_internal.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // // Continuation of the BASIC cold start routine @@ -27,3 +28,6 @@ basic_warm_start_real: !: jmp basic_main_loop + + +#endif // ROM layout diff --git a/c64/basic/init/e394.basic_cold_start.s b/c64/basic/init/e394.basic_cold_start.s index fe181381..8f59919f 100644 --- a/c64/basic/init/e394.basic_cold_start.s +++ b/c64/basic/init/e394.basic_cold_start.s @@ -1,5 +1,8 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + + // BASIC Cold start entry point -// Compute's Mapping the 64 p211 +// Computes Mapping the 64 p211 basic_cold_start: @@ -17,6 +20,9 @@ basic_cold_start: dey bpl !-- - // Remaining part wouldn't fit here + // Remaining part would not fit here jmp basic_cold_start_internal + + +#endif // ROM layout diff --git a/c64/basic/init/e3b7.basic_warm_start.jmp.s b/c64/basic/init/e3b7.basic_warm_start.jmp.s index 8ebcfbde..0e1f0031 100644 --- a/c64/basic/init/e3b7.basic_warm_start.jmp.s +++ b/c64/basic/init/e3b7.basic_warm_start.jmp.s @@ -1,5 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // Clear screen etc, show READY prompt. basic_warm_start: jmp basic_warm_start_real + + +#endif // ROM layout diff --git a/c64/basic/init/e422.initmsg.jmp.s b/c64/basic/init/e422.initmsg.jmp.s index 5bb33656..cdbac7ea 100644 --- a/c64/basic/init/e422.initmsg.jmp.s +++ b/c64/basic/init/e422.initmsg.jmp.s @@ -1,11 +1,15 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // // Well-known BASIC routine, described in: // -// - [CM64] Compute's Mapping the Commodore 64 - page 212 +// - [CM64] Computes Mapping the Commodore 64 - page 212 // // Prints the start-up messages // INITMSG: jmp initmsg_real + + +#endif // ROM layout diff --git a/c64/basic/init/initmsg_bytes_free.s b/c64/basic/init/initmsg_bytes_free.s index d4df557c..03ac32ce 100644 --- a/c64/basic/init/initmsg_bytes_free.s +++ b/c64/basic/init/initmsg_bytes_free.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // // Print out the amount of free bytes - for the startup banner @@ -19,3 +20,6 @@ initmsg_bytes_free: // Print rest of the start up message ldx #34 jmp print_packed_message + + +#endif // ROM layout diff --git a/c64/basic/init/initmsg_real.s b/c64/basic/init/initmsg_real.s index 8a9d3924..7158d7d6 100644 --- a/c64/basic/init/initmsg_real.s +++ b/c64/basic/init/initmsg_real.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // Routine is too long to fit in the original location @@ -146,3 +147,6 @@ initmsg_real: #endif + + +#endif // ROM layout diff --git a/c64/basic/init/startup_banner.s b/c64/basic/init/startup_banner.s index 7543ef0a..21955b67 100644 --- a/c64/basic/init/startup_banner.s +++ b/c64/basic/init/startup_banner.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // // Startup banner, to be displayed during cold start @@ -110,3 +111,6 @@ pre_revision_string: // .byte $0D,$05,$92,$00 #endif + + +#endif // ROM layout diff --git a/c64/basic/init_oldtxt.s b/c64/basic/init_oldtxt.s index 6becf049..a4e42014 100644 --- a/c64/basic/init_oldtxt.s +++ b/c64/basic/init_oldtxt.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + init_oldtxt: @@ -7,3 +9,6 @@ init_oldtxt: sta OLDTXT+1 rts + + +#endif // ROM layout diff --git a/c64/basic/injest_comma.s b/c64/basic/injest_comma.s index 06e50338..b890fd92 100644 --- a/c64/basic/injest_comma.s +++ b/c64/basic/injest_comma.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // Consummes a comma in a BASIC code, C set for no coma found @@ -17,3 +19,6 @@ injest_comma: injest_comma_found: clc rts + + +#endif // ROM layout diff --git a/c64/basic/injest_number.s b/c64/basic/injest_number.s index 6266e036..14c97fe2 100644 --- a/c64/basic/injest_number.s +++ b/c64/basic/injest_number.s @@ -1,3 +1,6 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + + // Parse a number from the input buffer at (TXTPTR) // Result is put into FAC1. // TXTPTR is updated with first position after the number. @@ -5,7 +8,7 @@ // XXX - Remember decimal position and exponent, and apply them // after to produce normalised floating point number. -// XXX - Doesn't use routines to access memory under ROMs etc. +// XXX - Does not use routines to access memory under ROMs etc. // This is important, because this routine operates on numbers in BASIC text. ij_not_a_digit: @@ -127,7 +130,7 @@ ij_loop2: // Carry set, so we have overflowed. // We should shift everything right one digit, and increase // the exponent by one. The non-zero exponent tells us that we - // can't fit any more precision in. + // can not fit any more precision in. jsr fac1_mantissa_div2 !: @@ -149,5 +152,6 @@ erase_fac1: sta FACOV rts - - + + +#endif // ROM layout diff --git a/c64/basic/pack_word.s b/c64/basic/pack_word.s index b332d8e2..0157b13b 100644 --- a/c64/basic/pack_word.s +++ b/c64/basic/pack_word.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // Pack a word using the simple compression scheme. // This has to be the same implementation as in compress_text.c // because we compress input lines of BASIC to do the tokenisation. @@ -253,3 +255,6 @@ not_a_match: // Not a char that we can pack, so return 0 lda #$00 rts + + +#endif // ROM layout diff --git a/c64/basic/peek_line_pointer_null_check.s b/c64/basic/peek_line_pointer_null_check.s index e71a8d56..a35509ac 100644 --- a/c64/basic/peek_line_pointer_null_check.s +++ b/c64/basic/peek_line_pointer_null_check.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // Return C=1 if a pointer in BASIC memory space is NULL, else C=0 // X = ZP pointer to check @@ -32,3 +34,6 @@ peek_line_pointer_null_check: ptr_not_null: sec rts + + +#endif // ROM layout diff --git a/c64/basic/print_integer.s b/c64/basic/print_integer.s index 47d58223..a0aed8fc 100644 --- a/c64/basic/print_integer.s +++ b/c64/basic/print_integer.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // Works similar to $BDCD in original C64 BASIC // XXX Should eventually get replaced by a more flexible and optimal routine. // Temp result gets written to $0100-$0104 @@ -142,3 +144,6 @@ number_table_hi: .byte 0,8,1,9,2 .byte 1,6,3,8,4 .byte 3,2,7,6,8 + + +#endif // ROM layout diff --git a/c64/basic/print_packed_message.s b/c64/basic/print_packed_message.s index 2f44a411..71e162da 100644 --- a/c64/basic/print_packed_message.s +++ b/c64/basic/print_packed_message.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // This routine prints messages that have been packed // using the make_error_tables program. // The general idea is to save space in the ROM. @@ -226,3 +228,6 @@ is_uncommon_char: phy_trash_a jmp has_nybl + + +#endif // ROM layout diff --git a/c64/basic/ready_message.s b/c64/basic/ready_message.s index 3a349177..95dbc00f 100644 --- a/c64/basic/ready_message.s +++ b/c64/basic/ready_message.s @@ -1,6 +1,11 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + + ready_message: // See src/make_error_tables.c for packed message handling // information. ldx #29 jmp print_packed_message + +#endif // ROM layout diff --git a/c64/basic/rom_revision/a004.identifier.s b/c64/basic/rom_revision/a004.identifier.s index 88cbb600..241d37c6 100644 --- a/c64/basic/rom_revision/a004.identifier.s +++ b/c64/basic/rom_revision/a004.identifier.s @@ -1,6 +1,10 @@ -// Compute's Mapping the 64, p89 +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + +// Computes Mapping the 64, p89 // 8 character name // MEGABAS2 = "MEGA BASIC 2" .byte $4D,$45,$47,$41,$42,$41,$53,$32 + +#endif // ROM layout diff --git a/c64/basic/rom_revision/bf52.rom_revision_basic.s b/c64/basic/rom_revision/bf52.rom_revision_basic.s index 8fe574c8..1a1d89bb 100644 --- a/c64/basic/rom_revision/bf52.rom_revision_basic.s +++ b/c64/basic/rom_revision/bf52.rom_revision_basic.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // // !!! PROPOSAL ONLY !!! PROPOSAL ONLY !!! NOT FOR USING EXTERNALLY YET !!! @@ -6,7 +7,7 @@ // Do not change! Locations of the following data should be constant - now and forever! // // If you want to integrate Open ROMs support in your emulator, FPGA ccomputer, etc. - this -// is the official way to recognize the ROM and it's revision. +// is the official way to recognize the ROM and its revision. // @@ -30,3 +31,6 @@ rom_revision_basic_string: .byte $00 // marks the end of string __rom_revision_basic_end: + + +#endif // ROM layout diff --git a/c64/basic/rom_revision/e4b7.rom_revision_kernal.s b/c64/basic/rom_revision/e4b7.rom_revision_kernal.s index e98bb1a8..bb11b2f2 100644 --- a/c64/basic/rom_revision/e4b7.rom_revision_kernal.s +++ b/c64/basic/rom_revision/e4b7.rom_revision_kernal.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) // // !!! PROPOSAL ONLY !!! PROPOSAL ONLY !!! NOT FOR USING EXTERNALLY YET !!! @@ -6,14 +7,14 @@ // Do not change! Locations of the following data should be constant - now and forever! // // If you want to integrate Open ROMs support in your emulator, FPGA ccomputer, etc. - this -// is the official way to recognize the ROM and it's revision. +// is the official way to recognize the ROM and its revision. // // $E4B7 // This vector is to be used by non-Kernal ROMs, if they want to - // complain about incompatible ROM releases - don't use it directly, + // complain about incompatible ROM releases - do not use it directly, // use a 'panic' pseudocommand with error code (will be passed using .A) // #P_ERR_ROM_MISMATCH - it should remain stable even between releases @@ -44,3 +45,6 @@ rom_revision_kernal_string: .byte $00 // marks the end of string __rom_revision_kernal_end: + + +#endif // ROM layout diff --git a/c64/basic/select_device.s b/c64/basic/select_device.s index 6d9a2e76..408397b2 100644 --- a/c64/basic/select_device.s +++ b/c64/basic/select_device.s @@ -1,7 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + select_device: - // Take last device number, make sure it's a drive - 8 or above. Above 30, + // Take last device number, make sure it is a drive - 8 or above. Above 30, // although illegal for IEC we also consider a drive, as they exists // drivers assigning these numbers to CBM-DOS capable devices - like some // IEEE-488 carts. @@ -9,11 +11,12 @@ select_device: // If current device is not a drive, set device to 8 (first drive number) // Device number is left in X, for SETFLS Kernal routine - // Note: if tape support is introduced here, make sure DOS wedge won't get broken - ldx FA cpx #$08 bcs !+ ldx #$08 !: rts + + +#endif // ROM layout diff --git a/c64/basic/tokenise_line.s b/c64/basic/tokenise_line.s index 7a642834..54405d93 100644 --- a/c64/basic/tokenise_line.s +++ b/c64/basic/tokenise_line.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // Tokenise a line of BASIC // Stored at $0200 // Length in __tokenise_work1 @@ -267,3 +269,5 @@ done_searching_for_token: lda #$00 rts + +#endif // ROM layout diff --git a/c64/basic/under_rom_routines.s b/c64/basic/under_rom_routines.s index 1027e57a..e4f80525 100644 --- a/c64/basic/under_rom_routines.s +++ b/c64/basic/under_rom_routines.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + // IMPORTANT: // These routines lengths cannot be changed without changing // the aliases for peek_under_roms, poke_under_roms etc @@ -152,3 +154,6 @@ smd1: rts #endif + + +#endif // ROM layout diff --git a/c64/basic/wedge_dos.s b/c64/basic/wedge_dos.s index b7292c5d..68e50117 100644 --- a/c64/basic/wedge_dos.s +++ b/c64/basic/wedge_dos.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + #if CONFIG_DOS_WEDGE @@ -256,3 +258,6 @@ wedge_dos_setnam: jmp JSETNAM #endif // CONFIG_DOS_WEDGE + + +#endif // ROM layout diff --git a/c64/basic/wedge_tape.s b/c64/basic/wedge_tape.s index 4edbe8e8..df781320 100644 --- a/c64/basic/wedge_tape.s +++ b/c64/basic/wedge_tape.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) + #if CONFIG_TAPE_WEDGE @@ -32,3 +34,6 @@ wedge_tape: #endif // CONFIG_TAPE_WEDGE + + +#endif // ROM layout diff --git a/c64/kernal/,disabled/u64_load.s b/c64/kernal/,disabled/u64_load.s index 7b585c1e..2bdc4d73 100644 --- a/c64/kernal/,disabled/u64_load.s +++ b/c64/kernal/,disabled/u64_load.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD // // LOAD routine hook for fast loading via UltiDOS @@ -129,3 +130,6 @@ u64_load_check_status_ok: jmp !- !: rts + + +#endif // ROM layout diff --git a/c64/kernal/,stubs/e6b6.advance_cursor.s b/c64/kernal/,stubs/e6b6.advance_cursor.s index 4e5b7d5f..b9a279ba 100644 --- a/c64/kernal/,stubs/e6b6.advance_cursor.s +++ b/c64/kernal/,stubs/e6b6.advance_cursor.s @@ -1,4 +1,8 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // XXX provide documentation and implementation STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/kernal/,stubs/e701.previous_line.s b/c64/kernal/,stubs/e701.previous_line.s index 4e5b7d5f..b9a279ba 100644 --- a/c64/kernal/,stubs/e701.previous_line.s +++ b/c64/kernal/,stubs/e701.previous_line.s @@ -1,4 +1,8 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // XXX provide documentation and implementation STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/kernal/,stubs/e716.chrout_screen.s b/c64/kernal/,stubs/e716.chrout_screen.s index 423ed67b..009d09d4 100644 --- a/c64/kernal/,stubs/e716.chrout_screen.s +++ b/c64/kernal/,stubs/e716.chrout_screen.s @@ -1,4 +1,8 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // Screen CHROUT STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/kernal/,stubs/e96c.insert_line_at_top.s b/c64/kernal/,stubs/e96c.insert_line_at_top.s index f28c13c4..2a42c3c1 100644 --- a/c64/kernal/,stubs/e96c.insert_line_at_top.s +++ b/c64/kernal/,stubs/e96c.insert_line_at_top.s @@ -1,4 +1,8 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // Insert line at top of screen STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/kernal/,stubs/f646.iec_close.s b/c64/kernal/,stubs/f646.iec_close.s index d4d05036..7b4f1ba9 100644 --- a/c64/kernal/,stubs/f646.iec_close.s +++ b/c64/kernal/,stubs/f646.iec_close.s @@ -1,5 +1,8 @@ - +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // IEC close STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/kernal/,stubs/fd90.unknown.s b/c64/kernal/,stubs/fd90.unknown.s index 4e5b7d5f..b9a279ba 100644 --- a/c64/kernal/,stubs/fd90.unknown.s +++ b/c64/kernal/,stubs/fd90.unknown.s @@ -1,4 +1,8 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // XXX provide documentation and implementation STUB_IMPLEMENTATION() + + +#endif // ROM layout diff --git a/c64/kernal/assets/cartridge_signature.s b/c64/kernal/assets/cartridge_signature.s index 2b0c5f90..c6aabb98 100644 --- a/c64/kernal/assets/cartridge_signature.s +++ b/c64/kernal/assets/cartridge_signature.s @@ -1,3 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + cartridge_signature: + .byte $C3,$C2,$CD,$38,$30 + + +#endif // ROM layout diff --git a/c64/kernal/assets/e8da.colour_codes.s b/c64/kernal/assets/e8da.colour_codes.s index fdf0b980..89849a12 100644 --- a/c64/kernal/assets/e8da.colour_codes.s +++ b/c64/kernal/assets/e8da.colour_codes.s @@ -1,6 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // CHR$ codes for the 16 colours colour_codes: .byte 144,5,28,159,156,30,31,158 .byte 129,149,150,151,152,153,154,155 + + +#endif // ROM layout diff --git a/c64/kernal/assets/fd30.vector_defaults.s b/c64/kernal/assets/fd30.vector_defaults.s index dd7fa89d..13b01e78 100644 --- a/c64/kernal/assets/fd30.vector_defaults.s +++ b/c64/kernal/assets/fd30.vector_defaults.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Default values for Kernal vectors - described in: // -// - [RG64] C64 Programmer's Reference Guide - page 293 (RESTOR), 304 (VECTOR) -// - [CM64] Compute's Mapping the Commodore 64 - page 237 +// - [RG64] C64 Programmers Reference Guide - page 293 (RESTOR), 304 (VECTOR) +// - [CM64] Computes Mapping the Commodore 64 - page 237 // vector_defaults: @@ -24,3 +25,6 @@ vector_defaults: .word default_brk_handler // USRCMD .word LOAD // ILOAD .word SAVE // ISAVE + + +#endif // ROM layout diff --git a/c64/kernal/assets/irq_timing_hi.s b/c64/kernal/assets/irq_timing_hi.s index 86cd851c..794dd5cb 100644 --- a/c64/kernal/assets/irq_timing_hi.s +++ b/c64/kernal/assets/irq_timing_hi.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Values for IRQ generation timer - original idea was: @@ -21,3 +22,6 @@ irq_timing_hi: // high bytes .byte >17045 // NTSC .byte >16421 // PAL + + +#endif // ROM layout diff --git a/c64/kernal/assets/irq_timing_lo.s b/c64/kernal/assets/irq_timing_lo.s index 6f6872aa..2d18d4ec 100644 --- a/c64/kernal/assets/irq_timing_lo.s +++ b/c64/kernal/assets/irq_timing_lo.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Values for IRQ generation timer - original idea was: @@ -21,3 +22,6 @@ irq_timing_lo: // low bytes .byte <17045 // NTSC .byte <16421 // PAL + + +#endif // ROM layout \ No newline at end of file diff --git a/c64/kernal/assets/kernal_messages.s b/c64/kernal/assets/kernal_messages.s index a14954c1..5f7712b1 100644 --- a/c64/kernal/assets/kernal_messages.s +++ b/c64/kernal/assets/kernal_messages.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Messages to be prined out by Kernal @@ -110,3 +111,6 @@ __msg_kernalfeatures: .byte $80 + $0D // end of string mark + return #endif // CONFIG_SHOW_FEATURES + + +#endif // ROM layout diff --git a/c64/kernal/errors.s b/c64/kernal/errors.s index 73e6c552..fc8c137a 100644 --- a/c64/kernal/errors.s +++ b/c64/kernal/errors.s @@ -1,5 +1,7 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) -// Kernal error codes are described in 'Commodore 64 Programmer's Reference Guide', page 306 + +// 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 @@ -56,14 +58,15 @@ kernalerror_TOP_MEM_RS232: sec rts -// Kernal status codes are described in 'Commodore 64 Programmer's Reference Guide', page 292 + +// 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 currentl not implemented - and most likely not really needed +// The following two statuses are currently not implemented - and most likely not really needed // kernalstatus_TIMEOUT_WRITE: // lda IOSTATUS @@ -88,3 +91,6 @@ kernalstatus_DEVICE_NOT_FOUND: ora #K_STS_DEVICE_NOT_FOUND sta IOSTATUS rts + + +#endif // ROM layout diff --git a/c64/kernal/iec/acptr.s b/c64/kernal/iec/acptr.s index 2ed7962d..98d44570 100644 --- a/c64/kernal/iec/acptr.s +++ b/c64/kernal/iec/acptr.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 274 -// - [CM64] Compute's Mapping the Commodore 64 - page 224/225 +// - [RG64] C64 Programmers Reference Guide - page 274 +// - [CM64] Computes Mapping the Commodore 64 - page 224/225 // // CPU registers that has to be preserved (see [RG64]): .Y // @@ -28,3 +29,6 @@ ACPTR: #else jmp kernalerror_ILLEGAL_DEVICE_NUMBER #endif + + +#endif // ROM layout diff --git a/c64/kernal/iec/chkin_iec.s b/c64/kernal/iec/chkin_iec.s index b86dee9c..80742876 100644 --- a/c64/kernal/iec/chkin_iec.s +++ b/c64/kernal/iec/chkin_iec.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // IEC part of the CHKIN routine @@ -29,3 +30,6 @@ chkin_iec: jmp chkin_set_device #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/chrin_iec.s b/c64/kernal/iec/chrin_iec.s index 93ad7afc..8c216097 100644 --- a/c64/kernal/iec/chrin_iec.s +++ b/c64/kernal/iec/chrin_iec.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // IEC part of the CHRIN routine @@ -8,3 +9,6 @@ chrin_iec: // XXX is this really all? jmp JACPTR + + +#endif // ROM layout diff --git a/c64/kernal/iec/chrout_iec.s b/c64/kernal/iec/chrout_iec.s index 38924b76..59263d27 100644 --- a/c64/kernal/iec/chrout_iec.s +++ b/c64/kernal/iec/chrout_iec.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // IEC part of the CHROUT routine @@ -10,3 +11,6 @@ chrout_iec: jsr JCIOUT bcc_far chrout_done_success jmp chrout_done_fail + + +#endif // ROM layout diff --git a/c64/kernal/iec/ciout.s b/c64/kernal/iec/ciout.s index 3b92cc14..3edcf734 100644 --- a/c64/kernal/iec/ciout.s +++ b/c64/kernal/iec/ciout.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 279/280 -// - [CM64] Compute's Mapping the Commodore 64 - page 224 +// - [RG64] C64 Programmers Reference Guide - page 279/280 +// - [CM64] Computes Mapping the Commodore 64 - page 224 // // CPU registers that has to be preserved (see [RG64]): .X, .Y // @@ -47,3 +48,6 @@ ciout_send_byte: rts #endif + + +#endif // ROM layout diff --git a/c64/kernal/iec/ckout_iec.s b/c64/kernal/iec/ckout_iec.s index 662f4840..7f2e882e 100644 --- a/c64/kernal/iec/ckout_iec.s +++ b/c64/kernal/iec/ckout_iec.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // IEC part of the CKOUT routine @@ -29,3 +30,6 @@ ckout_iec: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/close_iec.s b/c64/kernal/iec/close_iec.s index 0cdc2801..c2a16c12 100644 --- a/c64/kernal/iec/close_iec.s +++ b/c64/kernal/iec/close_iec.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // IEC part of the CLOSE routine @@ -33,3 +34,6 @@ close_iec_end: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/clrchn_iec.s b/c64/kernal/iec/clrchn_iec.s index 84993a0c..ea4e5a6d 100644 --- a/c64/kernal/iec/clrchn_iec.s +++ b/c64/kernal/iec/clrchn_iec.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // IEC part of the CLRCHN routine @@ -28,3 +29,6 @@ clrchn_iec: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_check_devnum.s b/c64/kernal/iec/iec_check_devnum.s index e6ac9c08..c4b9beb2 100644 --- a/c64/kernal/iec/iec_check_devnum.s +++ b/c64/kernal/iec/iec_check_devnum.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Checks whether device number (in .A) is a correct IEC device number @@ -31,3 +32,6 @@ iec_check_devnum_failed: rts #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_close_load.s b/c64/kernal/iec/iec_close_load.s index 5cc8e76a..aba2fa33 100644 --- a/c64/kernal/iec/iec_close_load.s +++ b/c64/kernal/iec/iec_close_load.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Common part of CLOSE and LOAD/SAVE routines for IEC @@ -29,3 +30,6 @@ iec_close_load: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_cmd_close.s b/c64/kernal/iec/iec_cmd_close.s index 126cb04e..3a18f4cf 100644 --- a/c64/kernal/iec/iec_cmd_close.s +++ b/c64/kernal/iec/iec_cmd_close.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Kernal internal IEC routine @@ -21,3 +22,6 @@ iec_cmd_close: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_cmd_open.s b/c64/kernal/iec/iec_cmd_open.s index 78d5364b..5630fa24 100644 --- a/c64/kernal/iec/iec_cmd_open.s +++ b/c64/kernal/iec/iec_cmd_open.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Kernal internal IEC routine @@ -66,3 +67,6 @@ iec_check_channel_openclose: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_pull_release.s b/c64/kernal/iec/iec_pull_release.s index 8be0e851..2924ce36 100644 --- a/c64/kernal/iec/iec_pull_release.s +++ b/c64/kernal/iec/iec_pull_release.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Helper IEC routines to pull/release certain lines @@ -83,3 +84,6 @@ iec_pull_release_end: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_return.s b/c64/kernal/iec/iec_return.s index b73a8d1f..3141f1dd 100644 --- a/c64/kernal/iec/iec_return.s +++ b/c64/kernal/iec/iec_return.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Helper routines to return with error/success @@ -39,3 +40,6 @@ iec_return_DEVICE_NOT_FOUND: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_rx_byte.s b/c64/kernal/iec/iec_rx_byte.s index 56d54aa6..06fb768e 100644 --- a/c64/kernal/iec/iec_rx_byte.s +++ b/c64/kernal/iec/iec_rx_byte.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Receive a byte from the IEC bus. // Implemented based on https://www.pagetable.com/?p=1135, https://github.com/mist64/cbmbus_doc, // http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf (page 11) @@ -155,3 +157,6 @@ iec_rx_end: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_rx_check_eoi.s b/c64/kernal/iec/iec_rx_check_eoi.s index b36d840e..386940e4 100644 --- a/c64/kernal/iec/iec_rx_check_eoi.s +++ b/c64/kernal/iec/iec_rx_check_eoi.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Helper routine to check for EOI while receiving byte from IEC @@ -33,3 +34,6 @@ iec_rx_check_eoi_confirm: iec_rx_check_eoi_done: rts + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_send_file_name.s b/c64/kernal/iec/iec_send_file_name.s index 72f107bf..46a35577 100644 --- a/c64/kernal/iec/iec_send_file_name.s +++ b/c64/kernal/iec/iec_send_file_name.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Sends file (stream) name to IEC device @@ -42,3 +43,6 @@ iec_send_file_name_done: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_set_idle.s b/c64/kernal/iec/iec_set_idle.s index 4833eba6..0c2b1f7b 100644 --- a/c64/kernal/iec/iec_set_idle.s +++ b/c64/kernal/iec/iec_set_idle.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) #if CONFIG_IEC @@ -12,3 +13,6 @@ iec_set_idle: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_turnaround_to_listen.s b/c64/kernal/iec/iec_turnaround_to_listen.s index f77a5a54..6a2c4094 100644 --- a/c64/kernal/iec/iec_turnaround_to_listen.s +++ b/c64/kernal/iec/iec_turnaround_to_listen.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // According to http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf // pages 7--8. // See also https://www.pagetable.com/?p=1135, https://github.com/mist64/cbmbus_doc @@ -39,3 +41,6 @@ iec_turnaround_to_listen: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_turnaround_to_talk.s b/c64/kernal/iec/iec_turnaround_to_talk.s index 624c648d..0cc73093 100644 --- a/c64/kernal/iec/iec_turnaround_to_talk.s +++ b/c64/kernal/iec/iec_turnaround_to_talk.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // According to http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf // pages 7--8. // See also https://www.pagetable.com/?p=1135, https://github.com/mist64/cbmbus_doc @@ -31,3 +33,6 @@ iec_turnaround_to_talk: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_tx_byte.s b/c64/kernal/iec/iec_tx_byte.s index 91b91abb..5e6a98c8 100644 --- a/c64/kernal/iec/iec_tx_byte.s +++ b/c64/kernal/iec/iec_tx_byte.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // Implemented based on https://www.pagetable.com/?p=1135, https://github.com/mist64/cbmbus_doc @@ -161,3 +162,6 @@ iec_tx_common_finalize: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_tx_command.s b/c64/kernal/iec/iec_tx_command.s index 04c8a0ca..7d636fab 100644 --- a/c64/kernal/iec/iec_tx_command.s +++ b/c64/kernal/iec/iec_tx_command.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // Implemented based on https://www.pagetable.com/?p=1135, https://github.com/mist64/cbmbus_doc @@ -41,3 +42,6 @@ iec_tx_command: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_tx_command_finalize.s b/c64/kernal/iec/iec_tx_command_finalize.s index 976fdb93..f0322fcc 100644 --- a/c64/kernal/iec/iec_tx_command_finalize.s +++ b/c64/kernal/iec/iec_tx_command_finalize.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Routine to finalize some IEC commands - which do not end in turnaround and are not followed by others // Implemented based on https://www.pagetable.com/?p=1135, https://github.com/mist64/cbmbus_doc @@ -22,3 +24,6 @@ iec_tx_command_finalize: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_tx_flush.s b/c64/kernal/iec/iec_tx_flush.s index fdef1d2a..3b870d71 100644 --- a/c64/kernal/iec/iec_tx_flush.s +++ b/c64/kernal/iec/iec_tx_flush.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // Flush the IEC output buffer (if not empty) - send byte with EOI // @@ -20,3 +21,6 @@ iec_tx_flush: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_update_eal_by_y.s b/c64/kernal/iec/iec_update_eal_by_y.s index a41a6106..8248345e 100644 --- a/c64/kernal/iec/iec_update_eal_by_y.s +++ b/c64/kernal/iec/iec_update_eal_by_y.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Common EAL update routine @@ -19,3 +20,6 @@ iec_update_EAL_by_Y: // note: Carry has to be set by caller! #endif + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_wait1ms.s b/c64/kernal/iec/iec_wait1ms.s index 4e05f18e..bcbc48ce 100644 --- a/c64/kernal/iec/iec_wait1ms.s +++ b/c64/kernal/iec/iec_wait1ms.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Wait 1 ms (1000 usec) // // On NTSC this means 1023 cycles (slightly less on PAL, but we have to be sure). -// We can't count on badlines, as the screen might be disabled. +// We cant count on badlines, as the screen might be disabled. // Delay here is implemented using VIC-II raster register. Since one raster is // 63 cycles, we need at least 17 full rasters to be 100% sure we wait enough @@ -31,3 +32,6 @@ wait_x_bars: // additional entry point for delayy in screen and tape support iec_wait_rts: // dummy RTS, for very short waits rts + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_wait20us.s b/c64/kernal/iec/iec_wait20us.s index 21c5caa5..1056544d 100644 --- a/c64/kernal/iec/iec_wait20us.s +++ b/c64/kernal/iec/iec_wait20us.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) #if CONFIG_IEC @@ -26,3 +27,6 @@ iec_wait20us: // 21 cycles #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_wait60us.s b/c64/kernal/iec/iec_wait60us.s index 5673d528..e9812926 100644 --- a/c64/kernal/iec/iec_wait60us.s +++ b/c64/kernal/iec/iec_wait60us.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Note: damages .X @@ -31,3 +32,6 @@ iec_wait60us: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_wait_for_clk_release.s b/c64/kernal/iec/iec_wait_for_clk_release.s index 25a65bd8..a3e038a6 100644 --- a/c64/kernal/iec/iec_wait_for_clk_release.s +++ b/c64/kernal/iec/iec_wait_for_clk_release.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) #if CONFIG_IEC @@ -11,3 +12,6 @@ iec_wait_for_clk_release: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_wait_for_data_pull.s b/c64/kernal/iec/iec_wait_for_data_pull.s index e4842c61..6635419f 100644 --- a/c64/kernal/iec/iec_wait_for_data_pull.s +++ b/c64/kernal/iec/iec_wait_for_data_pull.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) #if CONFIG_IEC @@ -13,3 +14,6 @@ iec_wait_for_data_pull: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/iec_wait_for_data_release.s b/c64/kernal/iec/iec_wait_for_data_release.s index e75c2ef2..99688ed6 100644 --- a/c64/kernal/iec/iec_wait_for_data_release.s +++ b/c64/kernal/iec/iec_wait_for_data_release.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) #if CONFIG_IEC @@ -12,3 +13,6 @@ iec_wait_for_data_release: rts #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/listen.s b/c64/kernal/iec/listen.s index f7e59c8c..0f408c73 100644 --- a/c64/kernal/iec/listen.s +++ b/c64/kernal/iec/listen.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 285 -// - [CM64] Compute's Mapping the Commodore 64 - page 223 +// - [RG64] C64 Programmers Reference Guide - page 285 +// - [CM64] Computes Mapping the Commodore 64 - page 223 // - https://www.pagetable.com/?p=1031, https://github.com/mist64/cbmbus_doc // - http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf // @@ -33,3 +34,6 @@ LISTEN: jmp kernalerror_ILLEGAL_DEVICE_NUMBER #endif + + +#endif // ROM layout diff --git a/c64/kernal/iec/load_iec.s b/c64/kernal/iec/load_iec.s index 65db83b3..82976a67 100644 --- a/c64/kernal/iec/load_iec.s +++ b/c64/kernal/iec/load_iec.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // IEC part of the LOAD routine @@ -192,3 +193,6 @@ load_iec_get_addr_byte: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/open_iec.s b/c64/kernal/iec/open_iec.s index a4ff090e..c2c95dfe 100644 --- a/c64/kernal/iec/open_iec.s +++ b/c64/kernal/iec/open_iec.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // IEC part of the OPEN routine @@ -38,3 +39,6 @@ open_iec_done: #endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/save_iec.s b/c64/kernal/iec/save_iec.s index 03923d00..73feeee3 100644 --- a/c64/kernal/iec/save_iec.s +++ b/c64/kernal/iec/save_iec.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // IEC part of the SAVE routine @@ -124,4 +125,7 @@ iec_save_loop_end: rts -#endif // CONFIG_IEC \ No newline at end of file +#endif // CONFIG_IEC + + +#endif // ROM layout diff --git a/c64/kernal/iec/second.s b/c64/kernal/iec/second.s index d1931234..a5a1fb54 100644 --- a/c64/kernal/iec/second.s +++ b/c64/kernal/iec/second.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 296 -// - [CM64] Compute's Mapping the Commodore 64 - page 223/224 +// - [RG64] C64 Programmers Reference Guide - page 296 +// - [CM64] Computes Mapping the Commodore 64 - page 223/224 // - https://www.pagetable.com/?p=1031, , https://github.com/mist64/cbmbus_doc // // CPU registers that has to be preserved (see [RG64]): .X, .Y @@ -28,3 +29,6 @@ SECOND: jmp kernalerror_ILLEGAL_DEVICE_NUMBER #endif + + +#endif // ROM layout diff --git a/c64/kernal/iec/talk.s b/c64/kernal/iec/talk.s index f9726d4d..54216edd 100644 --- a/c64/kernal/iec/talk.s +++ b/c64/kernal/iec/talk.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 301/302 -// - [CM64] Compute's Mapping the Commodore 64 - page 223 +// - [RG64] C64 Programmers Reference Guide - page 301/302 +// - [CM64] Computes Mapping the Commodore 64 - page 223 // - https://www.pagetable.com/?p=1031, https://github.com/mist64/cbmbus_doc // - http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf // @@ -46,3 +47,6 @@ common_talk_listen: // common part of TALK and LISTEN jmp kernalerror_ILLEGAL_DEVICE_NUMBER #endif + + +#endif // ROM layout diff --git a/c64/kernal/iec/tksa.s b/c64/kernal/iec/tksa.s index 9794a7b9..1084121e 100644 --- a/c64/kernal/iec/tksa.s +++ b/c64/kernal/iec/tksa.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 302 -// - [CM64] Compute's Mapping the Commodore 64 - page 224 +// - [RG64] C64 Programmers Reference Guide - page 302 +// - [CM64] Computes Mapping the Commodore 64 - page 224 // - https://www.pagetable.com/?p=1031, https://github.com/mist64/cbmbus_doc // // CPU registers that has to be preserved (see [RG64]): .X, .Y @@ -28,3 +29,6 @@ TKSA: jmp kernalerror_ILLEGAL_DEVICE_NUMBER #endif + + +#endif // ROM layout diff --git a/c64/kernal/iec/unlsn.s b/c64/kernal/iec/unlsn.s index 857956c6..df96b33a 100644 --- a/c64/kernal/iec/unlsn.s +++ b/c64/kernal/iec/unlsn.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 303 -// - [CM64] Compute's Mapping the Commodore 64 - page 224 +// - [RG64] C64 Programmers Reference Guide - page 303 +// - [CM64] Computes Mapping the Commodore 64 - page 224 // - https://www.pagetable.com/?p=1031, , https://github.com/mist64/cbmbus_doc // - http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf // @@ -35,3 +36,6 @@ UNLSN: jmp kernalerror_ILLEGAL_DEVICE_NUMBER #endif + + +#endif // ROM layout diff --git a/c64/kernal/iec/untlk.s b/c64/kernal/iec/untlk.s index e4bb2717..221d7698 100644 --- a/c64/kernal/iec/untlk.s +++ b/c64/kernal/iec/untlk.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 304 -// - [CM64] Compute's Mapping the Commodore 64 - page 224 +// - [RG64] C64 Programmers Reference Guide - page 304 +// - [CM64] Computes Mapping the Commodore 64 - page 224 // - https://www.pagetable.com/?p=1031, , https://github.com/mist64/cbmbus_doc // - http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf // @@ -33,7 +34,7 @@ common_untlk_tksa: // common part of UNTLK and TKSA sta TBTCNT jsr iec_tx_command bcs !+ // branch if error - // XXX - for TKSA, is it really the right place to do a turnaround? I've got some doubts + // XXX - for TKSA, is it really the right place to do a turnaround? I have some doubts // (it forces us to send the TKSA command 'manually' sometimes), but // Luigi Di Fraia (https://luigidifraia.wordpress.com/2017/06/27/codebase64-on-the-kernal-behaviour/) // claims TKSA Kernal routine actually does the turnaround @@ -46,3 +47,6 @@ common_untlk_tksa: // common part of UNTLK and TKSA jmp kernalerror_ILLEGAL_DEVICE_NUMBER #endif + + +#endif // ROM layout diff --git a/c64/kernal/iec_fast/burst_cia1_advertise.s b/c64/kernal/iec_fast/burst_cia1_advertise.s index e233c3d6..34cfa431 100644 --- a/c64/kernal/iec_fast/burst_cia1_advertise.s +++ b/c64/kernal/iec_fast/burst_cia1_advertise.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Advertise burst IEC protocol support to the receiver @@ -31,3 +32,6 @@ burst_advertise_done: #endif + + +#endif // ROM layout diff --git a/c64/kernal/iec_fast/burst_cia2_advertise.s b/c64/kernal/iec_fast/burst_cia2_advertise.s index 3081f000..c73134dc 100644 --- a/c64/kernal/iec_fast/burst_cia2_advertise.s +++ b/c64/kernal/iec_fast/burst_cia2_advertise.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Advertise burst IEC protocol support to the receiver @@ -55,3 +56,6 @@ burst_advertise_done: #endif + + +#endif // ROM layout diff --git a/c64/kernal/iec_fast/burst_soft_advertise.s b/c64/kernal/iec_fast/burst_soft_advertise.s index 90625451..bcbe565c 100644 --- a/c64/kernal/iec_fast/burst_soft_advertise.s +++ b/c64/kernal/iec_fast/burst_soft_advertise.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Advertise burst IEC protocol support to the receiver @@ -26,3 +27,6 @@ burst_advertise_done: #endif + + +#endif // ROM layout diff --git a/c64/kernal/iec_fast/dolphindos_detect.s b/c64/kernal/iec_fast/dolphindos_detect.s index 0975785c..75abe6d7 100644 --- a/c64/kernal/iec_fast/dolphindos_detect.s +++ b/c64/kernal/iec_fast/dolphindos_detect.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Helper routine for JiffyDOS detection @@ -60,3 +61,6 @@ dolphindos_detect_success: #endif // CONFIG_IEC_DOLPHINDOS + + +#endif // ROM layout diff --git a/c64/kernal/iec_fast/dolphindos_load.s b/c64/kernal/iec_fast/dolphindos_load.s index 849f3948..9d57239a 100644 --- a/c64/kernal/iec_fast/dolphindos_load.s +++ b/c64/kernal/iec_fast/dolphindos_load.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // DolphinDOS protocol support for IEC - optimized load loop @@ -117,3 +118,6 @@ dolphindos_load_end: #endif // CONFIG_IEC_DOLPHINDOS and not CONFIG_MEMORY_MODEL_60K + + +#endif // ROM layout diff --git a/c64/kernal/iec_fast/jiffydos_bittable.s b/c64/kernal/iec_fast/jiffydos_bittable.s index 94e89a39..930e1665 100644 --- a/c64/kernal/iec_fast/jiffydos_bittable.s +++ b/c64/kernal/iec_fast/jiffydos_bittable.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Helper table for encoding lower nibble for JiffyDOS, @@ -37,3 +38,6 @@ jiffydos_bittable: #endif // CONFIG_IEC_JIFFYDOS + + +#endif // ROM layout diff --git a/c64/kernal/iec_fast/jiffydos_detect.s b/c64/kernal/iec_fast/jiffydos_detect.s index 0058ad87..982590d5 100644 --- a/c64/kernal/iec_fast/jiffydos_detect.s +++ b/c64/kernal/iec_fast/jiffydos_detect.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Helper routine for JiffyDOS detection @@ -49,3 +50,6 @@ jiffydos_detect_end: #endif // CONFIG_IEC_JIFFYDOS + + +#endif // ROM layout diff --git a/c64/kernal/iec_fast/jiffydos_load.s b/c64/kernal/iec_fast/jiffydos_load.s index bd83e271..d6f4c168 100644 --- a/c64/kernal/iec_fast/jiffydos_load.s +++ b/c64/kernal/iec_fast/jiffydos_load.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // JiffyDOS protocol support for IEC - optimized load loop @@ -168,3 +169,6 @@ jiffydos_load_end: #endif // CONFIG_IEC_JIFFYDOS and not CONFIG_MEMORY_MODEL_60K + + +#endif // ROM layout diff --git a/c64/kernal/iec_fast/jiffydos_prepare.s b/c64/kernal/iec_fast/jiffydos_prepare.s index 1dc8f29b..4acf4011 100644 --- a/c64/kernal/iec_fast/jiffydos_prepare.s +++ b/c64/kernal/iec_fast/jiffydos_prepare.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // JiffyDOS transfer preparation routine @@ -27,3 +28,6 @@ jiffydos_prepare: #endif // CONFIG_IEC_JIFFYDOS + + +#endif // ROM layout diff --git a/c64/kernal/iec_fast/jiffydos_rx_byte.s b/c64/kernal/iec_fast/jiffydos_rx_byte.s index cb55f3ec..3b25675f 100644 --- a/c64/kernal/iec_fast/jiffydos_rx_byte.s +++ b/c64/kernal/iec_fast/jiffydos_rx_byte.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // JiffyDOS protocol support for IEC - byte reception @@ -108,3 +109,6 @@ jiffydos_rx_byte_end: #endif // CONFIG_IEC_JIFFYDOS + + +#endif // ROM layout diff --git a/c64/kernal/iec_fast/jiffydos_tx_byte.s b/c64/kernal/iec_fast/jiffydos_tx_byte.s index 26be0860..85c2f0cf 100644 --- a/c64/kernal/iec_fast/jiffydos_tx_byte.s +++ b/c64/kernal/iec_fast/jiffydos_tx_byte.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // JiffyDOS protocol support for IEC - byte transfer @@ -101,3 +102,6 @@ jiffydos_tx_byte_wait_eoi: #endif // CONFIG_IEC_JIFFYDOS + + +#endif // ROM layout diff --git a/c64/kernal/iec_fast/jiffydos_wait_line.s b/c64/kernal/iec_fast/jiffydos_wait_line.s index cf6e9169..a086d3d1 100644 --- a/c64/kernal/iec_fast/jiffydos_wait_line.s +++ b/c64/kernal/iec_fast/jiffydos_wait_line.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // JiffyDOS helper routine to wait for appropriate moment, @@ -32,3 +33,6 @@ jiffydos_wait_line_done: #endif // CONFIG_IEC_JIFFYDOS + + +#endif // ROM layout diff --git a/c64/kernal/init/cartridge_check.s b/c64/kernal/init/cartridge_check.s index 00221fb4..f8705b27 100644 --- a/c64/kernal/init/cartridge_check.s +++ b/c64/kernal/init/cartridge_check.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // c64 prg p263 cartridge_check: @@ -11,3 +13,6 @@ cartridge_check_l1: // FALLTROUGH no_cartridge: rts + + +#endif // ROM layout diff --git a/c64/kernal/init/cint_screen_keyboard.s b/c64/kernal/init/cint_screen_keyboard.s index 0470d710..70dad444 100644 --- a/c64/kernal/init/cint_screen_keyboard.s +++ b/c64/kernal/init/cint_screen_keyboard.s @@ -1,10 +1,11 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // This is a part CINT which initializes screen and keyboard // // For more details see: -// - [RG64] C64 Programmer's Reference Guide - page 280 -// - [CM64] Compute's Mapping the Commodore 64 - page 242 +// - [RG64] C64 Programmers Reference Guide - page 280 +// - [CM64] Computes Mapping the Commodore 64 - page 242 cint_screen_keyboard: @@ -15,7 +16,7 @@ cint_screen_keyboard: lda #>scnkey_set_keytab sta KEYLOG+1 - // Initialise cursor blink flags (Compute's Mapping the 64 p215) + // Initialise cursor blink flags (Computes Mapping the 64 p215) lda #$01 sta BLNCT @@ -30,7 +31,7 @@ cint_screen_keyboard: #endif - // Set keyboard decode vector (Compute's Mapping the 64 p215) + // Set keyboard decode vector (Computes Mapping the 64 p215) #if CONFIG_LEGACY_SCNKEY @@ -42,10 +43,10 @@ cint_screen_keyboard: bpl !- sta BufferQuantity - // Set key repeat delay (Compute's Mapping the 64 p215) + // Set key repeat delay (Computes Mapping the 64 p215) // Making some numbers up here: Repeat every ~1/10th sec // But require key to be held for ~1/3sec before - // repeating (Compute's Mapping the 64 p58) + // repeating (Computes Mapping the 64 p58) // Not needed for default keyboard scanning code @@ -54,11 +55,11 @@ cint_screen_keyboard: #endif - // Set current colour for text (Compute's Mapping the 64 p215) + // Set current colour for text (Computes Mapping the 64 p215) ldx #$01 // default is light blue ($0E), but we use a different one stx COLOR - // Set maximum keyboard buffer size (Compute's Mapping the 64 p215) + // Set maximum keyboard buffer size (Computes Mapping the 64 p215) ldx #10 stx XMAX @@ -66,6 +67,9 @@ cint_screen_keyboard: ldx #$00 stx MODE - // Fallthrough/jump to screen clear routine (Compute's Mapping the 64 p215) + // Fallthrough/jump to screen clear routine (Computes Mapping the 64 p215) jmp clear_screen + + +#endif // ROM layout diff --git a/c64/kernal/init/e518.cint_legacy.s b/c64/kernal/init/e518.cint_legacy.s index 93effe63..8b404300 100644 --- a/c64/kernal/init/e518.cint_legacy.s +++ b/c64/kernal/init/e518.cint_legacy.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Part of the official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 280 -// - [CM64] Compute's Mapping the Commodore 64 - page 242 +// - [RG64] C64 Programmers Reference Guide - page 280 +// - [CM64] Computes Mapping the Commodore 64 - page 242 // // CPU registers that has to be preserved (see [RG64]): none // @@ -20,3 +21,6 @@ cint_legacy: // $E518 // Game 'Operacja Proboszcz' is one example. jmp cint_screen_keyboard // XXX try to fit the code here + + +#endif // ROM layout diff --git a/c64/kernal/init/e5a0.setup_vicii.s b/c64/kernal/init/e5a0.setup_vicii.s index 78ab30a9..30958d41 100644 --- a/c64/kernal/init/e5a0.setup_vicii.s +++ b/c64/kernal/init/e5a0.setup_vicii.s @@ -1,8 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Well-known Kernal routine, described in: // -// - [CM64] Compute's Mapping the Commodore 64 - page 215 +// - [CM64] Computes Mapping the Commodore 64 - page 215 // @@ -20,7 +21,7 @@ setup_vicii: #if !CONFIG_MB_MEGA_65 && !CONFIG_MB_ULTIMATE_64 - // Disable C128 extra keys - just to be sure they won't interfere with anything + // Disable C128 extra keys - just to be sure they will not interfere with anything stx VIC_XSCAN @@ -64,3 +65,6 @@ setup_vicii: // Setup default I/O devices jmp clrchn_reset + + +#endif // ROM layout diff --git a/c64/kernal/init/fce2.hw_entry_reset.s b/c64/kernal/init/fce2.hw_entry_reset.s index 29348a67..ab646e89 100644 --- a/c64/kernal/init/fce2.hw_entry_reset.s +++ b/c64/kernal/init/fce2.hw_entry_reset.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Resources describing the C64 reset sequence: // https://www.c64-wiki.com/wiki/Reset_(Process) @@ -48,3 +50,6 @@ hw_entry_reset: // c64 prg p269 jmp (IBASIC_COLD_START) + + +#endif // ROM layout diff --git a/c64/kernal/init/fd50.ramtas.s b/c64/kernal/init/fd50.ramtas.s index 70cb41c7..9e1b0f9d 100644 --- a/c64/kernal/init/fd50.ramtas.s +++ b/c64/kernal/init/fd50.ramtas.s @@ -1,18 +1,19 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 291 -// - [CM64] Compute's Mapping the Commodore 64 - page 237 +// - [RG64] C64 Programmers Reference Guide - page 291 +// - [CM64] Computes Mapping the Commodore 64 - page 237 // // CPU registers that has to be preserved (see [RG64]): none // RAMTAS: - // C64 Programmer's Reference guide p291: + // C64 Programmers Reference guide p291: // Clear $0000-$0101, $0200-$03ff - // PGS: $0000, $0001 are CPU IO ports, so shouldn't get written to + // PGS: $0000, $0001 are CPU IO ports, so should not get written to // How many ways are there to efficiently erase these two pages // of RAM? We would like to avoid any unnecessary byte similarity @@ -26,7 +27,7 @@ RAMTAS: !: sta $0300,Y sta $0200,Y - sta $0002,Y // that's why we don't use .X for index, we do not want zeropage addressing here! + sta $0002,Y // that is why we do not use .X for index, we do not want zeropage addressing here! iny bne !- @@ -81,3 +82,6 @@ ramtas_32k: ldy #$80 bne !- // branch always + + +#endif // ROM layout diff --git a/c64/kernal/init/fda3.ioinit.s b/c64/kernal/init/fda3.ioinit.s index 549e245a..0c08a714 100644 --- a/c64/kernal/init/fda3.ioinit.s +++ b/c64/kernal/init/fda3.ioinit.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 285 -// - [CM64] Compute's Mapping the Commodore 64 - page 238 +// - [RG64] C64 Programmers Reference Guide - page 285 +// - [CM64] Computes Mapping the Commodore 64 - page 238 // // CPU registers that has to be preserved (see [RG64]): none // @@ -142,3 +143,6 @@ IOINIT: rts #endif + + +#endif // ROM layout diff --git a/c64/kernal/init/ff5b.cint.s b/c64/kernal/init/ff5b.cint.s index 6f8fe591..e7d0aefa 100644 --- a/c64/kernal/init/ff5b.cint.s +++ b/c64/kernal/init/ff5b.cint.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 280 -// - [CM64] Compute's Mapping the Commodore 64 - page 242 +// - [RG64] C64 Programmers Reference Guide - page 280 +// - [CM64] Computes Mapping the Commodore 64 - page 242 // // CPU registers that has to be preserved (see [RG64]): none // @@ -12,3 +13,6 @@ CINT: jsr cint_legacy jmp setup_pal_ntsc + + +#endif // ROM layout diff --git a/c64/kernal/init/fffc.vector_reset.s b/c64/kernal/init/fffc.vector_reset.s index 20545b6c..07ab436f 100644 --- a/c64/kernal/init/fffc.vector_reset.s +++ b/c64/kernal/init/fffc.vector_reset.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // $FFFC - CPU Reset Vector // Uncontrovertial, as it is a CPU requirement, and nothing else. .word hw_entry_reset + + +#endif // ROM layout diff --git a/c64/kernal/init/setup_pal_ntsc.s b/c64/kernal/init/setup_pal_ntsc.s index 101cf716..91b70b58 100644 --- a/c64/kernal/init/setup_pal_ntsc.s +++ b/c64/kernal/init/setup_pal_ntsc.s @@ -1,5 +1,6 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) -// Detect video system (PAL/NTSC), use Graham's method, as it's short and reliable +// Detect video system (PAL/NTSC), use method by Graham, as it is short and reliable // see here: https://codebase64.org/doku.php?id=base:detect_pal_ntsc @@ -59,3 +60,6 @@ setup_irq_timer: // entry point needed by UP9600 and CIA1 burst mod support sta CIA1_TIMAHI // $DC05 rts + + +#endif // ROM layout diff --git a/c64/kernal/interrupts/ea31.default_irq_handler.s b/c64/kernal/interrupts/ea31.default_irq_handler.s index be964c9f..f5380e5e 100644 --- a/c64/kernal/interrupts/ea31.default_irq_handler.s +++ b/c64/kernal/interrupts/ea31.default_irq_handler.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + default_irq_handler: @@ -42,3 +44,6 @@ default_irq_handler_end_tape: // Acknowledge CIA interrupt and return jmp clear_cia1_interrupt_flag_and_return_from_interrupt + + +#endif // ROM layout diff --git a/c64/kernal/interrupts/ea7e.ack_cia1_return_from_interrupt.s b/c64/kernal/interrupts/ea7e.ack_cia1_return_from_interrupt.s index ba5ebfa1..be43f53c 100644 --- a/c64/kernal/interrupts/ea7e.ack_cia1_return_from_interrupt.s +++ b/c64/kernal/interrupts/ea7e.ack_cia1_return_from_interrupt.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // https://csdb.dk/forums/index.php?roomid=11&topicid=5776 // Clear the CIA1 interrupt flag, and then fall through to // the return from interrupt routine @@ -9,3 +11,6 @@ clear_cia1_interrupt_flag_and_return_from_interrupt: ldy CIA1_ICR // FALL THROUGH to $EA81 + + +#endif // ROM layout diff --git a/c64/kernal/interrupts/ea81.return_from_interrupt.s b/c64/kernal/interrupts/ea81.return_from_interrupt.s index 4d22d7ea..c98fdc5a 100644 --- a/c64/kernal/interrupts/ea81.return_from_interrupt.s +++ b/c64/kernal/interrupts/ea81.return_from_interrupt.s @@ -1,8 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // The IRQ is a commonly messed with thing on the C64, // so we need to handle entry points that are commonly // relied upon, including: // $EA31 - Standard IRQ routine -// $EA61 - Check keyboard, but don't update timer? https://github.com/cc65/cc65/issues/324 +// $EA61 - Check keyboard, but do not update timer? https://github.com/cc65/cc65/issues/324 // $EA81 - https://www.lemon64.com/forum/viewtopic.php?t=2112&sid=6ea01982b26da69783120a7923ca46fb // Also the $0314 vector is widely used (e.g., https://www.lemon64.com/forum/viewtopic.php?t=2112&sid=6ea01982b26da69783120a7923ca46fb) @@ -10,9 +12,12 @@ return_from_interrupt: // Restore registers and return - // Sequence according to Compute's Mapping the 64 p73 + // Sequence according to Computes Mapping the 64 p73 ply_trash_a plx_trash_a pla rti + + +#endif // ROM layout diff --git a/c64/kernal/interrupts/fe47.default_nmi_handler.s b/c64/kernal/interrupts/fe47.default_nmi_handler.s index 9f877bb5..80d22c67 100644 --- a/c64/kernal/interrupts/fe47.default_nmi_handler.s +++ b/c64/kernal/interrupts/fe47.default_nmi_handler.s @@ -1,10 +1,11 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) default_nmi_handler: - // Implemented according to Compute's Mapping the Commodore 64, page 74 + // Implemented according to Computes Mapping the Commodore 64, page 74 // and to https://www.c64-wiki.com/wiki/Interrupt - // Save registers, sequence according to Compute's Mapping the Commodore 64, page 73 + // Save registers, sequence according to Computes Mapping the Commodore 64, page 73 pha phx_trash_a phy_trash_a @@ -25,8 +26,11 @@ default_nmi_handler: bcs !+ jmp return_from_interrupt // no STOP pressed !: - // STOP + RESTORE - clean the address of the BRK instruction (it's not BRK) first + // STOP + RESTORE - clean the address of the BRK instruction (it is not BRK) first lda #$00 sta CMP0+0 sta CMP0+1 jmp (CBINV) + + +#endif // ROM layout diff --git a/c64/kernal/interrupts/fe66.default_brk_handler.s b/c64/kernal/interrupts/fe66.default_brk_handler.s index 78a63c72..0be9fe7b 100644 --- a/c64/kernal/interrupts/fe66.default_brk_handler.s +++ b/c64/kernal/interrupts/fe66.default_brk_handler.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) default_brk_handler: - // Implemented according to Compute's Mapping the Commodore 64, pages 73-74 + // Implemented according to Computes Mapping the Commodore 64, pages 73-74 - sei // disable IRQs, to be sure they won't interfere + sei // disable IRQs, to be sure they wont interfere ldx #$00 sta VIC_SCROLX // turn the display off - we want as little screen artifacts as possible @@ -13,8 +14,8 @@ default_brk_handler: jsr JRESTOR jsr JIOINIT - // Original routine calls just a part of CINT - but I'm not sure which one. Most likely it - // skips the PAL/NTSC check by calling $E518. I suspect bug in the original ROM, let's + // Original routine calls just a part of CINT - but I am not sure which one. Most likely it + // skips the PAL/NTSC check by calling $E518. I suspect bug in the original ROM, lets // call the whole CINT, just to be sure everything is initialized. jsr CINT @@ -22,3 +23,6 @@ default_brk_handler: cli jmp (IBASIC_WARM_START) + + +#endif // ROM layout diff --git a/c64/kernal/interrupts/fffa.vector_nmi.s b/c64/kernal/interrupts/fffa.vector_nmi.s index 19ee0ad8..af50742b 100644 --- a/c64/kernal/interrupts/fffa.vector_nmi.s +++ b/c64/kernal/interrupts/fffa.vector_nmi.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // $FFFA - CPU NMI Hanlder // Uncontrovertial as this is also a CPU requirement. .word hw_entry_nmi + + +#endif // ROM layout diff --git a/c64/kernal/interrupts/fffe.vector_irq.s b/c64/kernal/interrupts/fffe.vector_irq.s index fd3e136d..1000bac8 100644 --- a/c64/kernal/interrupts/fffe.vector_irq.s +++ b/c64/kernal/interrupts/fffe.vector_irq.s @@ -1,5 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // $FFFE - CPU IRQ Vector. // This is non-controvertial, as it is a 6502 CPU requirement, and we just have to point // it to whatever IRQ routine we make. .word hw_entry_irq + + +#endif // ROM layout diff --git a/c64/kernal/interrupts/hw_entry_irq.s b/c64/kernal/interrupts/hw_entry_irq.s index e043ea0f..8fe45c93 100644 --- a/c64/kernal/interrupts/hw_entry_irq.s +++ b/c64/kernal/interrupts/hw_entry_irq.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + hw_entry_irq: @@ -5,11 +7,11 @@ hw_entry_irq: // so we need to handle entry points that are commonly // relied upon, including: // $EA31 - Standard IRQ routine - // $EA61 - Check keyboard, but don't update timer? https://github.com/cc65/cc65/issues/324 + // $EA61 - Check keyboard, but do not update timer? https://github.com/cc65/cc65/issues/324 // $EA81 - https://www.lemon64.com/forum/viewtopic.php?t=2112&sid=6ea01982b26da69783120a7923ca46fb // Also the $0314 vector is widely used (e.g., https://www.lemon64.com/forum/viewtopic.php?t=2112&sid=6ea01982b26da69783120a7923ca46fb) - // Save registers, sequence according to Compute's Mapping the Commodore 64, page 73 + // Save registers, sequence according to Computes Mapping the Commodore 64, page 73 pha phx_trash_a phy_trash_a @@ -46,3 +48,6 @@ irq_handler_brk: // Interrupt caused by BRK jmp (CBINV) + + +#endif // ROM layout diff --git a/c64/kernal/interrupts/hw_entry_nmi.s b/c64/kernal/interrupts/hw_entry_nmi.s index ca41e1d0..017e54c2 100644 --- a/c64/kernal/interrupts/hw_entry_nmi.s +++ b/c64/kernal/interrupts/hw_entry_nmi.s @@ -1,7 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + hw_entry_nmi: - sei // don't allow IRQ to interfere, see https://www.c64-wiki.com/wiki/Interrupt + sei // do not allow IRQ to interfere, see https://www.c64-wiki.com/wiki/Interrupt #if CONFIG_CPU_MOS_6502 && CONFIG_BCD_SAFE_INTERRUPTS cld // clear decimal flag to allow using it without disabling interrupts @@ -18,3 +20,6 @@ hw_entry_nmi: // Vector not initialized - call default interrupt routine pla jmp default_nmi_handler + + +#endif // ROM layout diff --git a/c64/kernal/iostack/chkinout.s b/c64/kernal/iostack/chkinout.s index c8d3bda8..951a4f92 100644 --- a/c64/kernal/iostack/chkinout.s +++ b/c64/kernal/iostack/chkinout.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Common part of CHKIN and CKOUT @@ -16,3 +17,6 @@ chkinout_file_not_open: ply_trash_a pla jmp kernalerror_FILE_NOT_OPEN + + +#endif // ROM layout diff --git a/c64/kernal/iostack/clall_real.s b/c64/kernal/iostack/clall_real.s index abdd9b69..820d6a88 100644 --- a/c64/kernal/iostack/clall_real.s +++ b/c64/kernal/iostack/clall_real.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 281 -// - [CM64] Compute's Mapping the Commodore 64 - page 230 +// - [RG64] C64 Programmers Reference Guide - page 281 +// - [CM64] Computes Mapping the Commodore 64 - page 230 // // CPU registers that has to be preserved (see [RG64]): .Y // @@ -16,7 +17,7 @@ clall_real: // Original routine probably just sets LDTND to 0, but this is not really safe, // so we actually close all the channels; at least IDE64 does the same for - // it's channels, see CLALL description in the IDE64 User's Guide + // its channels, see CLALL description in the IDE64 Users Guide !: ldy LDTND beq !+ @@ -34,3 +35,5 @@ clall_real: // Not sure whether original Kernal does so, but it seems sane to also clear possible errors jmp kernalstatus_reset + +#endif // ROM layout diff --git a/c64/kernal/iostack/f13e.getin.s b/c64/kernal/iostack/f13e.getin.s index 02d68bc3..88e36f11 100644 --- a/c64/kernal/iostack/f13e.getin.s +++ b/c64/kernal/iostack/f13e.getin.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 283 -// - [CM64] Compute's Mapping the Commodore 64 - page 227/228 +// - [RG64] C64 Programmers Reference Guide - page 283 +// - [CM64] Computes Mapping the Commodore 64 - page 227/228 // // CPU registers that has to be preserved (see [RG64]): for RS-232: .X, .Y // @@ -11,3 +12,6 @@ GETIN: jmp getin_real + + +#endif // ROM layout diff --git a/c64/kernal/iostack/f157.chrin.s b/c64/kernal/iostack/f157.chrin.s index f4deafb3..27216162 100644 --- a/c64/kernal/iostack/f157.chrin.s +++ b/c64/kernal/iostack/f157.chrin.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 277/278 -// - [CM64] Compute's Mapping the Commodore 64 - page 228 +// - [RG64] C64 Programmers Reference Guide - page 277/278 +// - [CM64] Computes Mapping the Commodore 64 - page 228 // // CPU registers that has to be preserved (see [RG64]): .Y // @@ -46,3 +47,6 @@ chrin_getin: // jump entry for GETIN // Not a supported device jmp lvs_device_not_found_error + + +#endif // ROM layout diff --git a/c64/kernal/iostack/f1ca.chrout.s b/c64/kernal/iostack/f1ca.chrout.s index 5c123847..810b535e 100644 --- a/c64/kernal/iostack/f1ca.chrout.s +++ b/c64/kernal/iostack/f1ca.chrout.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 278/279 -// - [CM64] Compute's Mapping the Commodore 64 - page 228 +// - [RG64] C64 Programmers Reference Guide - page 278/279 +// - [CM64] Computes Mapping the Commodore 64 - page 228 // // CPU registers that has to be preserved (see [RG64]): .Y // Additionally we have to preserve .X for out CHRIN and implementation @@ -15,7 +16,7 @@ CHROUT: // Save X and Y values // (Confirmed by writing a test program that X and Y - // don't get modified, in agreement with C64 PRG's + // do not get modified, in agreement with C64 PRG // description of CHROUT) phx_trash_a @@ -74,3 +75,6 @@ chrout_done_success: lda SCHAR clc // indicate success rts + + +#endif // ROM layout diff --git a/c64/kernal/iostack/f20e.chkin.s b/c64/kernal/iostack/f20e.chkin.s index bd86226c..da373edc 100644 --- a/c64/kernal/iostack/f20e.chkin.s +++ b/c64/kernal/iostack/f20e.chkin.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routines, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 275 -// - [CM64] Compute's Mapping the Commodore 64 - page 229 +// - [RG64] C64 Programmers Reference Guide - page 275 +// - [CM64] Computes Mapping the Commodore 64 - page 229 // // CPU registers that has to be preserved (see [RG64]): .Y, .A (see [CM64], page 213) // @@ -67,3 +68,6 @@ chkin_file_not_input: ply_trash_a pla jmp kernalerror_FILE_NOT_INPUT + + +#endif // ROM layout diff --git a/c64/kernal/iostack/f250.ckout.s b/c64/kernal/iostack/f250.ckout.s index 49a4d6a7..f51c8bbe 100644 --- a/c64/kernal/iostack/f250.ckout.s +++ b/c64/kernal/iostack/f250.ckout.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routines, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 276 -// - [CM64] Compute's Mapping the Commodore 64 - page 229 +// - [RG64] C64 Programmers Reference Guide - page 276 +// - [CM64] Computes Mapping the Commodore 64 - page 229 // // CPU registers that has to be preserved (see [RG64]): .Y, .A (see [CM64], page 213) // @@ -62,15 +63,4 @@ ckout_file_not_output: jmp kernalerror_FILE_NOT_OUTPUT - - - - - - - - - - - - +#endif // ROM layout diff --git a/c64/kernal/iostack/f291.close.s b/c64/kernal/iostack/f291.close.s index c4930447..0a4803c7 100644 --- a/c64/kernal/iostack/f291.close.s +++ b/c64/kernal/iostack/f291.close.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 281/282 -// - [CM64] Compute's Mapping the Commodore 64 - page 229/230 +// - [RG64] C64 Programmers Reference Guide - page 281/282 +// - [CM64] Computes Mapping the Commodore 64 - page 229/230 // - https://www.pagetable.com/?p=1031, https://github.com/mist64/cbmbus_doc (IEC command) // // CPU registers that has to be preserved (see [RG64]): none @@ -51,7 +52,10 @@ close_remove_from_table: // Decrement the list size variable dec LDTND - clc // report success - not sure if original CLOSE does this, but it's nevertheless a good practice + clc // report success - not sure if original CLOSE does this, but it is nevertheless a good practice close_end: rts + + +#endif // ROM layout diff --git a/c64/kernal/iostack/f32f.clall.jmp.s b/c64/kernal/iostack/f32f.clall.jmp.s index f0538e90..69efe881 100644 --- a/c64/kernal/iostack/f32f.clall.jmp.s +++ b/c64/kernal/iostack/f32f.clall.jmp.s @@ -1,6 +1,11 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // Our implementation is longer than the original one, // placing it here would cause a collision with CLRCHN + CLALL: jmp clall_real + + +#endif // ROM layout diff --git a/c64/kernal/iostack/f333.clrchn.s b/c64/kernal/iostack/f333.clrchn.s index ab94909f..ef566281 100644 --- a/c64/kernal/iostack/f333.clrchn.s +++ b/c64/kernal/iostack/f333.clrchn.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 282 -// - [CM64] Compute's Mapping the Commodore 64 - page 230 +// - [RG64] C64 Programmers Reference Guide - page 282 +// - [CM64] Computes Mapping the Commodore 64 - page 230 // // CPU registers that has to be preserved (see [RG64]): .Y // @@ -30,3 +31,6 @@ clrchn_reset: // entry needed by setup_vicii sta DFLTO rts + + +#endif // ROM layout diff --git a/c64/kernal/iostack/f34a.open.s b/c64/kernal/iostack/f34a.open.s index 3dc0e134..d9a843e8 100644 --- a/c64/kernal/iostack/f34a.open.s +++ b/c64/kernal/iostack/f34a.open.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 289 -// - [CM64] Compute's Mapping the Commodore 64 - page 230/231 +// - [RG64] C64 Programmers Reference Guide - page 289 +// - [CM64] Computes Mapping the Commodore 64 - page 230/231 // // CPU registers that has to be preserved (see [RG64]): none // @@ -42,7 +43,7 @@ open_has_space: // Update the tables // LAT / FAT / SAT support implemented according to - // 'Compute's Mapping the Commodore 64', page 52 + // 'Computes Mapping the Commodore 64', page 52 lda LA sta LAT, y @@ -76,3 +77,6 @@ open_done_success: clc rts + + +#endif // ROM layout diff --git a/c64/kernal/iostack/f49e.load_prep.s b/c64/kernal/iostack/f49e.load_prep.s index cc045026..523444a4 100644 --- a/c64/kernal/iostack/f49e.load_prep.s +++ b/c64/kernal/iostack/f49e.load_prep.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // LOAD preparation routine @@ -21,3 +22,6 @@ LOAD_PREP: sty MEMUSS+1 stx MEMUSS+0 jmp (ILOAD) + + +#endif // ROM layout diff --git a/c64/kernal/iostack/f4a5.load.s b/c64/kernal/iostack/f4a5.load.s index 2f173766..c2233541 100644 --- a/c64/kernal/iostack/f4a5.load.s +++ b/c64/kernal/iostack/f4a5.load.s @@ -1,8 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 286 -// - [CM64] Compute's Mapping the Commodore 64 - page 231 +// - [RG64] C64 Programmers Reference Guide - page 286 +// - [CM64] Computes Mapping the Commodore 64 - page 231 // - IEC reference at http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf // // CPU registers that has to be preserved (see [RG64]): none @@ -55,3 +57,6 @@ LOAD: #endif jmp lvs_illegal_device_number + + +#endif // ROM layout diff --git a/c64/kernal/iostack/f5dd.save_prep.s b/c64/kernal/iostack/f5dd.save_prep.s index d7cf3f86..a595e1c4 100644 --- a/c64/kernal/iostack/f5dd.save_prep.s +++ b/c64/kernal/iostack/f5dd.save_prep.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // SAVE preparation routine @@ -27,3 +28,6 @@ SAVE_PREP: sta STAL+0 jmp (ISAVE) + + +#endif // ROM layout diff --git a/c64/kernal/iostack/f5ed.save.s b/c64/kernal/iostack/f5ed.save.s index d8d053bf..bd3eb912 100644 --- a/c64/kernal/iostack/f5ed.save.s +++ b/c64/kernal/iostack/f5ed.save.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 293/294 -// - [CM64] Compute's Mapping the Commodore 64 - page 231/232 +// - [RG64] C64 Programmers Reference Guide - page 293/294 +// - [CM64] Computes Mapping the Commodore 64 - page 231/232 // - IEC reference at http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf // // CPU registers that has to be preserved (see [RG64]): none @@ -28,3 +29,6 @@ SAVE: #endif jmp lvs_illegal_device_number + + +#endif // ROM layout diff --git a/c64/kernal/iostack/findfls.s b/c64/kernal/iostack/findfls.s index 9da38026..07517924 100644 --- a/c64/kernal/iostack/findfls.s +++ b/c64/kernal/iostack/findfls.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // Just a helper routine @@ -21,3 +22,5 @@ find_fls_not_found: sec rts + +#endif // ROM layout diff --git a/c64/kernal/iostack/getin_real.s b/c64/kernal/iostack/getin_real.s index 681e2a17..fd2d60c0 100644 --- a/c64/kernal/iostack/getin_real.s +++ b/c64/kernal/iostack/getin_real.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 283 -// - [CM64] Compute's Mapping the Commodore 64 - page 227/228 +// - [RG64] C64 Programmers Reference Guide - page 283 +// - [CM64] Computes Mapping the Commodore 64 - page 227/228 // // CPU registers that has to be preserved (see [RG64]): for RS-232: .X, .Y // @@ -26,3 +27,6 @@ getin_real: #endif // HAS_RS232 jmp chrin_getin + + +#endif // ROM layout diff --git a/c64/kernal/iostack/load_save_common.s b/c64/kernal/iostack/load_save_common.s index a2d31714..95fc9ff2 100644 --- a/c64/kernal/iostack/load_save_common.s +++ b/c64/kernal/iostack/load_save_common.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Helper functions for various LOAD/VERIFY/SAVE routine variants (IEC / U64 / etc.) @@ -231,7 +232,7 @@ lvs_error_end: lvs_return_last_address: - // Return last address - Compute's Mapping the 64 says without the '+1', + // Return last address - Computes Mapping the 64 says without the '+1', // checked (short test program) on original ROMs that this is really the case ldx EAL+0 ldy EAL+1 @@ -264,3 +265,6 @@ lvs_verify_error: lda #B_ERR_VERIFY sec rts + + +#endif // ROM layout diff --git a/c64/kernal/iostack/readst.s b/c64/kernal/iostack/readst.s index 10a7d11f..0c2d29b7 100644 --- a/c64/kernal/iostack/readst.s +++ b/c64/kernal/iostack/readst.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 292 -// - [CM64] Compute's Mapping the Commodore 64 - page 239 +// - [RG64] C64 Programmers Reference Guide - page 292 +// - [CM64] Computes Mapping the Commodore 64 - page 239 // // CPU registers that has to be preserved (see [RG64]): .X, .Y // @@ -16,16 +17,19 @@ READST: cmp #$02 bne !+ - // This is RS-232 device - according to 'Compute's Mapping the Commodore 64' page 239 + // This is RS-232 device - according to 'Computes Mapping the Commodore 64' page 239 // it reads status from RSSTAT // XXX 'lda RSSTAT' not possible due to extended scnkey, fix it! lda #$FF rts !: - // According to 'Compute's Mapping the Commodore 64' page 239, it usually retrieves + // According to 'Computes Mapping the Commodore 64' page 239, it usually retrieves // status from IOSTATUS // XXX is it always the case if device is not RS-232 ? lda IOSTATUS rts + + +#endif // ROM layout diff --git a/c64/kernal/iostack/setfls.s b/c64/kernal/iostack/setfls.s index d57f770b..64f4ecb5 100644 --- a/c64/kernal/iostack/setfls.s +++ b/c64/kernal/iostack/setfls.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 297 -// - [CM64] Compute's Mapping the Commodore 64 - page 238 +// - [RG64] C64 Programmers Reference Guide - page 297 +// - [CM64] Computes Mapping the Commodore 64 - page 238 // // CPU registers that has to be preserved (see [RG64]): .A, .X, .Y // @@ -11,10 +12,13 @@ SETFLS: // There are 6 sane ways to implement this routine, - // I hope this one won't cause similarity to CBM code + // I hope this one will not cause similarity to CBM code sta LA sty SA stx FA rts + + +#endif // ROM layout diff --git a/c64/kernal/iostack/setmsg.s b/c64/kernal/iostack/setmsg.s index 87b1125f..60790752 100644 --- a/c64/kernal/iostack/setmsg.s +++ b/c64/kernal/iostack/setmsg.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 298 -// - [CM64] Compute's Mapping the Commodore 64 - page 239 +// - [RG64] C64 Programmers Reference Guide - page 298 +// - [CM64] Computes Mapping the Commodore 64 - page 239 // // CPU registers that has to be preserved (see [RG64]): .A, .X, .Y // @@ -11,3 +12,6 @@ SETMSG: sta MSGFLG rts + + +#endif // ROM layout diff --git a/c64/kernal/iostack/setnam.s b/c64/kernal/iostack/setnam.s index 78033a3c..42191c4d 100644 --- a/c64/kernal/iostack/setnam.s +++ b/c64/kernal/iostack/setnam.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 298/299 -// - [CM64] Compute's Mapping the Commodore 64 - page 238 +// - [RG64] C64 Programmers Reference Guide - page 298/299 +// - [CM64] Computes Mapping the Commodore 64 - page 238 // // CPU registers that has to be preserved (see [RG64]): .A, .X, .Y // @@ -11,10 +12,13 @@ SETNAM: // There are 6 sane ways to implement this routine, - // I hope this one won't cause similarity to CBM code + // I hope this one will not cause similarity to CBM code sta FNLEN sty FNADDR + 1 stx FNADDR + 0 rts + + +#endif // ROM layout diff --git a/c64/kernal/iostack/settmo.s b/c64/kernal/iostack/settmo.s index 16f84c40..f237ef28 100644 --- a/c64/kernal/iostack/settmo.s +++ b/c64/kernal/iostack/settmo.s @@ -1,13 +1,18 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 300 -// - [CM64] Compute's Mapping the Commodore 64 - page 239 +// - [RG64] C64 Programmers Reference Guide - page 300 +// - [CM64] Computes Mapping the Commodore 64 - page 239 // // CPU registers that has to be preserved (see [RG64]): .A, .X, .Y // + SETTMO: sta TIMOUT rts + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ff81.jcint.s b/c64/kernal/jumptable/ff81.jcint.s index ea93a325..996a3ad1 100644 --- a/c64/kernal/jumptable/ff81.jcint.s +++ b/c64/kernal/jumptable/ff81.jcint.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Initialise screen editor -// C64 Programmer's Reference Guide Page 272 +// C64 Programmers Reference Guide Page 272 jmp CINT + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ff84.jioinit.s b/c64/kernal/jumptable/ff84.jioinit.s index fda7c62c..f80e7374 100644 --- a/c64/kernal/jumptable/ff84.jioinit.s +++ b/c64/kernal/jumptable/ff84.jioinit.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Initialise input/output -// C64 Programmer's Reference Guide Page 272 +// C64 Programmers Reference Guide Page 272 jmp IOINIT + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ff87.jramtas.s b/c64/kernal/jumptable/ff87.jramtas.s index 616021c5..3a948d26 100644 --- a/c64/kernal/jumptable/ff87.jramtas.s +++ b/c64/kernal/jumptable/ff87.jramtas.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Initialise RAM, allocate tape buffer, set screen to $0400 -// C64 Programmer's Reference Guide Page 273 +// C64 Programmers Reference Guide Page 273 jmp RAMTAS + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ff8a.jrestor.s b/c64/kernal/jumptable/ff8a.jrestor.s index 0fa0057e..67480085 100644 --- a/c64/kernal/jumptable/ff8a.jrestor.s +++ b/c64/kernal/jumptable/ff8a.jrestor.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Restore default IO vectors -// C64 Programmer's Reference Guide Page 273 +// C64 Programmers Reference Guide Page 273 jmp RESTOR + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ff8d.jvector.s b/c64/kernal/jumptable/ff8d.jvector.s index cd0b9990..d8aa7536 100644 --- a/c64/kernal/jumptable/ff8d.jvector.s +++ b/c64/kernal/jumptable/ff8d.jvector.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Read/set vectored I/O -// C64 Programmer's Reference Guide Page 273 +// C64 Programmers Reference Guide Page 273 jmp VECTOR + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ff90.jsetmsg.s b/c64/kernal/jumptable/ff90.jsetmsg.s index 7f54b3ac..db47557b 100644 --- a/c64/kernal/jumptable/ff90.jsetmsg.s +++ b/c64/kernal/jumptable/ff90.jsetmsg.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Control KERNAL messages -// C64 Programmer's Reference Guide Page 273 +// C64 Programmers Reference Guide Page 273 jmp SETMSG + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ff93.jsecond.s b/c64/kernal/jumptable/ff93.jsecond.s index 6ae355f0..09bd1785 100644 --- a/c64/kernal/jumptable/ff93.jsecond.s +++ b/c64/kernal/jumptable/ff93.jsecond.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Send secondary address after LISTEN -// C64 Programmer's Reference Guide Page 273 +// C64 Programmers Reference Guide Page 273 jmp SECOND + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ff96.jtksa.s b/c64/kernal/jumptable/ff96.jtksa.s index 5f710af0..7684d841 100644 --- a/c64/kernal/jumptable/ff96.jtksa.s +++ b/c64/kernal/jumptable/ff96.jtksa.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Send secondary address after talk -// C64 Programmer's Reference Guide Page 273 +// C64 Programmers Reference Guide Page 273 jmp TKSA + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ff99.jmemtop.s b/c64/kernal/jumptable/ff99.jmemtop.s index b6653e94..59857cdf 100644 --- a/c64/kernal/jumptable/ff99.jmemtop.s +++ b/c64/kernal/jumptable/ff99.jmemtop.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // read/set the top of memory -// C64 Programmer's Reference Guide Page 272 +// C64 Programmers Reference Guide Page 272 jmp MEMTOP + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ff9c.jmembot.s b/c64/kernal/jumptable/ff9c.jmembot.s index 8745f99b..39a538d2 100644 --- a/c64/kernal/jumptable/ff9c.jmembot.s +++ b/c64/kernal/jumptable/ff9c.jmembot.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // read/set the bottom of memory -// C64 Programmer's Reference Guide Page 272 +// C64 Programmers Reference Guide Page 272 jmp MEMBOT + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ff9f.jscnkey.s b/c64/kernal/jumptable/ff9f.jscnkey.s index 5d71d27d..a91699a6 100644 --- a/c64/kernal/jumptable/ff9f.jscnkey.s +++ b/c64/kernal/jumptable/ff9f.jscnkey.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Scan keyboard -// C64 Programmer's Reference Guide Page 273 +// C64 Programmers Reference Guide Page 273 jmp SCNKEY + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffa2.jsettmo.s b/c64/kernal/jumptable/ffa2.jsettmo.s index 3d82b696..d3819103 100644 --- a/c64/kernal/jumptable/ffa2.jsettmo.s +++ b/c64/kernal/jumptable/ffa2.jsettmo.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Set timeout on serial bus -// C64 Programmer's Reference Guide Page 273 +// C64 Programmers Reference Guide Page 273 jmp SETTMO + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffa5.jacptr.s b/c64/kernal/jumptable/ffa5.jacptr.s index 6446229f..1003f2c3 100644 --- a/c64/kernal/jumptable/ffa5.jacptr.s +++ b/c64/kernal/jumptable/ffa5.jacptr.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Input byte from serial port -// C64 Programmer's Reference Guide Page 272 +// C64 Programmers Reference Guide Page 272 jmp ACPTR + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffa8.jciout.s b/c64/kernal/jumptable/ffa8.jciout.s index 2838110a..e731ebb4 100644 --- a/c64/kernal/jumptable/ffa8.jciout.s +++ b/c64/kernal/jumptable/ffa8.jciout.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Output byte to serial port -// C64 Programmer's Reference Guide Page 272 +// C64 Programmers Reference Guide Page 272 jmp CIOUT + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffab.juntlk.s b/c64/kernal/jumptable/ffab.juntlk.s index dc6ebbe0..b56e2056 100644 --- a/c64/kernal/jumptable/ffab.juntlk.s +++ b/c64/kernal/jumptable/ffab.juntlk.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Command serial bus to UNTALK -// C64 Programmer's Reference Guide Page 273 +// C64 Programmers Reference Guide Page 273 jmp UNTLK + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffae.junlsn.s b/c64/kernal/jumptable/ffae.junlsn.s index 55cab36f..7fdbb0ca 100644 --- a/c64/kernal/jumptable/ffae.junlsn.s +++ b/c64/kernal/jumptable/ffae.junlsn.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Command serial bus to UNLISTEN -// C64 Programmer's Reference Guide Page 273 +// C64 Programmers Reference Guide Page 273 jmp UNLSN + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffb1.jlisten.s b/c64/kernal/jumptable/ffb1.jlisten.s index e93c9be8..ed8194b1 100644 --- a/c64/kernal/jumptable/ffb1.jlisten.s +++ b/c64/kernal/jumptable/ffb1.jlisten.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Command devices on the serial bus to listen -// C64 Programmer's Reference Guide Page 272 +// C64 Programmers Reference Guide Page 272 jmp LISTEN + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffb4.jtalk.s b/c64/kernal/jumptable/ffb4.jtalk.s index f94fffd3..f81e4180 100644 --- a/c64/kernal/jumptable/ffb4.jtalk.s +++ b/c64/kernal/jumptable/ffb4.jtalk.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Command serial bus device to talk -// C64 Programmer's Reference Guide Page 273 +// C64 Programmers Reference Guide Page 273 jmp TALK + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffb7.jreadst.s b/c64/kernal/jumptable/ffb7.jreadst.s index 46fcc2fd..61d01c6d 100644 --- a/c64/kernal/jumptable/ffb7.jreadst.s +++ b/c64/kernal/jumptable/ffb7.jreadst.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Read I/O statusjmp -// C64 Programmer's Reference Guide Page 273 +// C64 Programmers Reference Guide Page 273 jmp READST + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffba.jsetfls.s b/c64/kernal/jumptable/ffba.jsetfls.s index ec77c14a..f74109bf 100644 --- a/c64/kernal/jumptable/ffba.jsetfls.s +++ b/c64/kernal/jumptable/ffba.jsetfls.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Set logical, first and second addresses -// C64 Programmer's Reference Guide Page 273 +// C64 Programmers Reference Guide Page 273 jmp SETFLS + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffbd.jsetnam.s b/c64/kernal/jumptable/ffbd.jsetnam.s index e0e3871e..eeb753bf 100644 --- a/c64/kernal/jumptable/ffbd.jsetnam.s +++ b/c64/kernal/jumptable/ffbd.jsetnam.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Set file name -// C64 Programmer's Reference Guide Page 273 +// C64 Programmers Reference Guide Page 273 jmp SETNAM + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffc0.jopen.s b/c64/kernal/jumptable/ffc0.jopen.s index 82a5aa1b..404bc2bf 100644 --- a/c64/kernal/jumptable/ffc0.jopen.s +++ b/c64/kernal/jumptable/ffc0.jopen.s @@ -1,5 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // open a logical file -// C64 Programmer's Reference Guide Page 272 -// According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect +// C64 Programmers Reference Guide Page 272 +// According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (IOPEN) + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffc3.jclose.s b/c64/kernal/jumptable/ffc3.jclose.s index badb18c8..368ef699 100644 --- a/c64/kernal/jumptable/ffc3.jclose.s +++ b/c64/kernal/jumptable/ffc3.jclose.s @@ -1,5 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // close a specified logical file -// C64 Programmer's Reference Guide Page 272 -// According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect +// C64 Programmers Reference Guide Page 272 +// According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (ICLOSE) + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffc6.jchkin.s b/c64/kernal/jumptable/ffc6.jchkin.s index b06874ef..9f4472bb 100644 --- a/c64/kernal/jumptable/ffc6.jchkin.s +++ b/c64/kernal/jumptable/ffc6.jchkin.s @@ -1,5 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Open channel for input -// C64 Programmer's Reference Guide Page 272 -// According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect +// C64 Programmers Reference Guide Page 272 +// According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (ICHKIN) + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffc9.jckout.s b/c64/kernal/jumptable/ffc9.jckout.s index 64ff0481..0a090ec4 100644 --- a/c64/kernal/jumptable/ffc9.jckout.s +++ b/c64/kernal/jumptable/ffc9.jckout.s @@ -1,5 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Open channel for output -// C64 Programmer's Reference Guide Page 272 -// According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect +// C64 Programmers Reference Guide Page 272 +// According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (ICKOUT) + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffcc.jclrchn.s b/c64/kernal/jumptable/ffcc.jclrchn.s index a207f2e4..a5706482 100644 --- a/c64/kernal/jumptable/ffcc.jclrchn.s +++ b/c64/kernal/jumptable/ffcc.jclrchn.s @@ -1,5 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // close input and output channels -// C64 Programmer's Reference Guide Page 272 -// According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect +// C64 Programmers Reference Guide Page 272 +// According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (ICLRCH) + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffcf.jchrin.s b/c64/kernal/jumptable/ffcf.jchrin.s index de1ae44e..ad84480a 100644 --- a/c64/kernal/jumptable/ffcf.jchrin.s +++ b/c64/kernal/jumptable/ffcf.jchrin.s @@ -1,5 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Input character from channel -// C64 Programmer's Reference Guide Page 272 -// According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect +// C64 Programmers Reference Guide Page 272 +// According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (IBASIN) + + +#endif // ROM layout \ No newline at end of file diff --git a/c64/kernal/jumptable/ffd2.jchrout.s b/c64/kernal/jumptable/ffd2.jchrout.s index c3f31a0e..e685f773 100644 --- a/c64/kernal/jumptable/ffd2.jchrout.s +++ b/c64/kernal/jumptable/ffd2.jchrout.s @@ -1,5 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Output character to channel -// C64 Programmer's Reference Guide Page 272 -// According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect +// C64 Programmers Reference Guide Page 272 +// According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (IBSOUT) + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffd5.jload.s b/c64/kernal/jumptable/ffd5.jload.s index 002e01fd..092653d8 100644 --- a/c64/kernal/jumptable/ffd5.jload.s +++ b/c64/kernal/jumptable/ffd5.jload.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // load RAM from a device -// C64 Programmer's Reference Guide Page 272 +// C64 Programmers Reference Guide Page 272 jmp LOAD_PREP + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffd8.jsave.s b/c64/kernal/jumptable/ffd8.jsave.s index 25f3fbec..f53a236c 100644 --- a/c64/kernal/jumptable/ffd8.jsave.s +++ b/c64/kernal/jumptable/ffd8.jsave.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // SAVE RAM to device -// C64 Programmer's Reference Guide Page 273 +// C64 Programmers Reference Guide Page 273 jmp SAVE_PREP + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffdb.jsettim.s b/c64/kernal/jumptable/ffdb.jsettim.s index 61625a29..c6fb5529 100644 --- a/c64/kernal/jumptable/ffdb.jsettim.s +++ b/c64/kernal/jumptable/ffdb.jsettim.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Set realtime clock -// C64 Programmer's Reference Guide Page 273 +// C64 Programmers Reference Guide Page 273 jmp SETTIM + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffde.jrdtim.s b/c64/kernal/jumptable/ffde.jrdtim.s index 5a190b14..b269356f 100644 --- a/c64/kernal/jumptable/ffde.jrdtim.s +++ b/c64/kernal/jumptable/ffde.jrdtim.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Read real time clock -// C64 Programmer's Reference Guide Page 273 +// C64 Programmers Reference Guide Page 273 jmp RDTIM + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffe1.jstop.s b/c64/kernal/jumptable/ffe1.jstop.s index 0938b7d1..ac1b2b60 100644 --- a/c64/kernal/jumptable/ffe1.jstop.s +++ b/c64/kernal/jumptable/ffe1.jstop.s @@ -1,5 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Scan stop key -// C64 Programmer's Reference Guide Page 273 -// According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect +// C64 Programmers Reference Guide Page 273 +// According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (ISTOP) + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffe4.jgetin.s b/c64/kernal/jumptable/ffe4.jgetin.s index feafd28c..e53a9f29 100644 --- a/c64/kernal/jumptable/ffe4.jgetin.s +++ b/c64/kernal/jumptable/ffe4.jgetin.s @@ -1,5 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // Get character from keyboard queue (keyboard buffer) -// C64 Programmer's Reference Guide Page 272 -// According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect +// C64 Programmers Reference Guide Page 272 +// According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (IGETIN) + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffe7.jclall.s b/c64/kernal/jumptable/ffe7.jclall.s index 287f85ac..efae3332 100644 --- a/c64/kernal/jumptable/ffe7.jclall.s +++ b/c64/kernal/jumptable/ffe7.jclall.s @@ -1,5 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // $FFE7 - Close all files vector // (http://codebase64.org/doku.php?id=base:kernalreference) -// According to Compute's Mapping the Commodore 64 (pages 74/75), this jump is indirect +// According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (ICLALL) + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffea.judtim.s b/c64/kernal/jumptable/ffea.judtim.s index bccd0603..5d47b17e 100644 --- a/c64/kernal/jumptable/ffea.judtim.s +++ b/c64/kernal/jumptable/ffea.judtim.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // $FFEA - Update jiffy clock vector // (http://codebase64.org/doku.php?id=base:kernalreference) jmp UDTIM + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/ffed.jscreen.s b/c64/kernal/jumptable/ffed.jscreen.s index 8f58f3f2..bf4c0ec7 100644 --- a/c64/kernal/jumptable/ffed.jscreen.s +++ b/c64/kernal/jumptable/ffed.jscreen.s @@ -1,4 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // $FFED - Return screen size (X=columns, Y=rows) // (http://codebase64.org/doku.php?id=base:kernalreference) jmp SCREEN + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/fff0.jplot.s b/c64/kernal/jumptable/fff0.jplot.s index 2a9f782c..8ca58b05 100644 --- a/c64/kernal/jumptable/fff0.jplot.s +++ b/c64/kernal/jumptable/fff0.jplot.s @@ -1,6 +1,11 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // $FFF0 - Get/Set cursor location vector // (http://codebase64.org/doku.php?id=base:kernalreference) // To set: C=0, to get, C=1 // X=row, Y=column jmp PLOT + + +#endif // ROM layout diff --git a/c64/kernal/jumptable/fff3.jiobase.s b/c64/kernal/jumptable/fff3.jiobase.s index 3250765f..2b84c4ed 100644 --- a/c64/kernal/jumptable/fff3.jiobase.s +++ b/c64/kernal/jumptable/fff3.jiobase.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 284 -// - [CM64] Compute's Mapping the Commodore 64 - page 214 +// - [RG64] C64 Programmers Reference Guide - page 284 +// - [CM64] Computes Mapping the Commodore 64 - page 214 // - http://codebase64.org/doku.php?id=base:kernalreference (original source) // // CPU registers that has to be preserved (see [RG64]): .A @@ -17,3 +18,5 @@ ldx #$00 rts + +#endif // ROM layout diff --git a/c64/kernal/keyboard/chrin_keyboard.s b/c64/kernal/keyboard/chrin_keyboard.s index be3efa72..dcff70e4 100644 --- a/c64/kernal/keyboard/chrin_keyboard.s +++ b/c64/kernal/keyboard/chrin_keyboard.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Keyboard part of the CHRIN routine @@ -170,3 +171,6 @@ chrin_programmable_key: bne !- // jumps always #endif // CONFIG_PROGRAMMABLE_KEYS + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/f142.getin_keyboard.s b/c64/kernal/keyboard/f142.getin_keyboard.s index 3e3da159..2afaac04 100644 --- a/c64/kernal/keyboard/f142.getin_keyboard.s +++ b/c64/kernal/keyboard/f142.getin_keyboard.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Well-known Kernal routine, described in: @@ -28,3 +29,6 @@ getin_keyboard: // XXX confirm that here is really a part of GETIN! clc rts + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/f6ed.stop.s b/c64/kernal/keyboard/f6ed.stop.s index 3f41b20a..8aca9a8d 100644 --- a/c64/kernal/keyboard/f6ed.stop.s +++ b/c64/kernal/keyboard/f6ed.stop.s @@ -1,16 +1,17 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 301 -// - [CM64] Compute's Mapping the Commodore 64 - page 232 +// - [RG64] C64 Programmers Reference Guide - page 301 +// - [CM64] Computes Mapping the Commodore 64 - page 232 // // CPU registers that has to be preserved (see [RG64]): .Y // STOP: // Bit 7 of STKEY contains the state of the STOP key - // (Compute's Mapping the 64, p27) + // (Computes Mapping the 64, p27) // BASIC checks carry flag to indicate STOP or not lda STKEY @@ -26,3 +27,6 @@ stop_pressed: sec lda #$00 rts + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix.s b/c64/kernal/keyboard/kb_matrix.s index b56631a5..ea6a7184 100644 --- a/c64/kernal/keyboard/kb_matrix.s +++ b/c64/kernal/keyboard/kb_matrix.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Keyboard matrix, based on // -// - [RG64] C64 Programmer's Reference Guide - pages 379-381 -// - [CM64] Compute's Mapping the Commodore 64 - pages 38-39 +// - [RG64] C64 Programmers Reference Guide - pages 379-381 +// - [CM64] Computes Mapping the Commodore 64 - pages 38-39 // - http://commodore128.mirkosoft.sk/keyboard.html (C128 extension) // - http://www.zimmers.net/cbmpics/cbm/c65/c65manual.txt @@ -58,3 +59,6 @@ __kb_matrix_ctrl: #endif .byte $1C,$00,$1D,$00,$00,$1F,$1E,$00 .byte $90,$06,$00,$05,$00,$00,$11,$00 + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_128.s b/c64/kernal/keyboard/kb_matrix_128.s index 85d09b7b..ac63a0f3 100644 --- a/c64/kernal/keyboard/kb_matrix_128.s +++ b/c64/kernal/keyboard/kb_matrix_128.s @@ -1,8 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Extended keyboard matrix for Commodore 128 keyboards, based on // -// - [CM128] Compute's Mapping the Commodore 128 - page 290 +// - [CM128] Computes Mapping the Commodore 128 - page 290 // - http://commodore128.mirkosoft.sk/keyboard.html // @@ -28,3 +29,6 @@ kb_matrix_128_bucky_filter: #endif // CONFIG_KEYBOARD_C128 and no CONFIG_LEGACY_SCNKEY + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_65.s b/c64/kernal/keyboard/kb_matrix_65.s index 58986d02..3e54aec7 100644 --- a/c64/kernal/keyboard/kb_matrix_65.s +++ b/c64/kernal/keyboard/kb_matrix_65.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Extended keyboard matrix for Commodore 65 keyboards, based on @@ -19,3 +20,6 @@ kb_matrix_65_shifted: #endif // CONFIG_KEYBOARD_C65 and no CONFIG_LEGACY_SCNKEY + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_alwaysrepeat.s b/c64/kernal/keyboard/kb_matrix_alwaysrepeat.s index ffb80e02..c9b6ea32 100644 --- a/c64/kernal/keyboard/kb_matrix_alwaysrepeat.s +++ b/c64/kernal/keyboard/kb_matrix_alwaysrepeat.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Matrix ids of keys which should be repeated regardless of RPTFLG // // Values based on: -// - [CM64] Compute's Mapping the Commodore 64 - page 58 +// - [CM64] Computes Mapping the Commodore 64 - page 58 // @@ -21,3 +22,6 @@ __kb_matrix_alwaysrepeat_end: #endif // no CONFIG_LEGACY_SCNKEY and no CONFIG_KEY_REPEAT_ALWAYS + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_bucky.s b/c64/kernal/keyboard/kb_matrix_bucky.s index 2d67f574..bdba72cb 100644 --- a/c64/kernal/keyboard/kb_matrix_bucky.s +++ b/c64/kernal/keyboard/kb_matrix_bucky.s @@ -1,10 +1,11 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Matrix for retrieving bucky key status on the C64 keyboard // // Values based on: -// - [CM64] Compute's Mapping the Commodore 64 - pages 58 (SHFLAG), 173 (matrix) -// - [CM128] Compute's Mapping the Commodore 128 - pages 212 (SHFLAG), 290 (matrix) +// - [CM64] Computes Mapping the Commodore 64 - pages 58 (SHFLAG), 173 (matrix) +// - [CM128] Computes Mapping the Commodore 128 - pages 212 (SHFLAG), 290 (matrix) // - https://github.com/MEGA65/c65-specifications/blob/master/c65manualupdated.txt // @@ -83,3 +84,6 @@ kb_matrix_bucky_shflag: // mask to be ORed to SHFLAG to mark key status #endif // no CONFIG_LEGACY_SCNKEY + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_bucky_filter.s b/c64/kernal/keyboard/kb_matrix_bucky_filter.s index 0e2a9b36..947a470d 100644 --- a/c64/kernal/keyboard/kb_matrix_bucky_filter.s +++ b/c64/kernal/keyboard/kb_matrix_bucky_filter.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Matrix for filtering out bucky keys while scanning the C64 keyboard // // Values based on: -// - [CM64] Compute's Mapping the Commodore 64 - pags 58 (SHFLAG), 173 (matrix) +// - [CM64] Computes Mapping the Commodore 64 - pags 58 (SHFLAG), 173 (matrix) // @@ -25,3 +26,6 @@ kb_matrix_bucky_filter: #endif // no CONFIG_LEGACY_SCNKEY + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_joy.s b/c64/kernal/keyboard/kb_matrix_joy.s index 8f9deaab..06c06fc8 100644 --- a/c64/kernal/keyboard/kb_matrix_joy.s +++ b/c64/kernal/keyboard/kb_matrix_joy.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Matrix for retrieving C64 joystick status and inject is as keyboard event @@ -36,3 +37,6 @@ kb_matrix_joy_keytab_hi: .byte >__kb_matrix_normal // right #endif + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_lookup.s b/c64/kernal/keyboard/kb_matrix_lookup.s index 9e1b8f34..f8bcd988 100644 --- a/c64/kernal/keyboard/kb_matrix_lookup.s +++ b/c64/kernal/keyboard/kb_matrix_lookup.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Helper table for determining keyboard matrix decoding table on the C64 keyboard @@ -21,3 +22,6 @@ kb_matrix_lookup: .byte $FF // %111 SHIFT+VENDOR+CTRL #endif + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_lookup_legacy.s b/c64/kernal/keyboard/kb_matrix_lookup_legacy.s index 62f2a932..3374c8ee 100644 --- a/c64/kernal/keyboard/kb_matrix_lookup_legacy.s +++ b/c64/kernal/keyboard/kb_matrix_lookup_legacy.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Work out if normal, shifted, control or Vendor modified keyboard. @@ -26,3 +27,6 @@ kb_matrix_lookup: .byte $80 // Vendor + CTRL + SHIFT #endif // CONFIG_LEGACY_SCNKEY + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_row_keys.s b/c64/kernal/keyboard/kb_matrix_row_keys.s index bb4b9afb..6557442a 100644 --- a/c64/kernal/keyboard/kb_matrix_row_keys.s +++ b/c64/kernal/keyboard/kb_matrix_row_keys.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Single row key codes for scanning the C64 keyboard // // Values based on: -// - [CM64] Compute's Mapping the Commodore 64 - pags 58 (SHFLAG), 173 (matrix) +// - [CM64] Computes Mapping the Commodore 64 - pags 58 (SHFLAG), 173 (matrix) // @@ -27,3 +28,6 @@ kb_matrix_row_keys: #endif // no CONFIG_LEGACY_SCNKEY + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_row_offsets.s b/c64/kernal/keyboard/kb_matrix_row_offsets.s index efc2ceaf..1f90d00a 100644 --- a/c64/kernal/keyboard/kb_matrix_row_offsets.s +++ b/c64/kernal/keyboard/kb_matrix_row_offsets.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Helper values to quickly determine row offset from the start of keyboard matrix @@ -21,3 +22,6 @@ kb_matrix_row_offsets: .byte 7*8 #endif // no CONFIG_LEGACY_SCNKEY + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/keyboard_disconnect.s b/c64/kernal/keyboard/keyboard_disconnect.s index 1fdae023..34aa2f89 100644 --- a/c64/kernal/keyboard/keyboard_disconnect.s +++ b/c64/kernal/keyboard/keyboard_disconnect.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Helper routine - disconnects the keyboard from CIA1_PRB, @@ -20,3 +21,6 @@ keyboard_disconnect: #endif + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/pop_keyboard_buffer.s b/c64/kernal/keyboard/pop_keyboard_buffer.s index 6f3b172b..142ceb23 100644 --- a/c64/kernal/keyboard/pop_keyboard_buffer.s +++ b/c64/kernal/keyboard/pop_keyboard_buffer.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // Pop key out of keyboard buffer // Disable interrupts while reading from keyboard buffer @@ -20,3 +21,6 @@ pop_keyboard_buffer: cli rts + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/programmable_keys.s b/c64/kernal/keyboard/programmable_keys.s index 1f31d204..791ca3cf 100644 --- a/c64/kernal/keyboard/programmable_keys.s +++ b/c64/kernal/keyboard/programmable_keys.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Command string definitions for programmable keys @@ -123,3 +124,6 @@ programmable_keys_offsets: #endif // CONFIG_PROGRAMMABLE_KEYS + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/scnkey.s b/c64/kernal/keyboard/scnkey.s index 0aadfd93..31f44917 100644 --- a/c64/kernal/keyboard/scnkey.s +++ b/c64/kernal/keyboard/scnkey.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 295 -// - [CM64] Compute's Mapping the Commodore 64 - page 220 +// - [RG64] C64 Programmers Reference Guide - page 295 +// - [CM64] Computes Mapping the Commodore 64 - page 220 // // CPU registers that has to be preserved (see [RG64]): none // @@ -488,3 +489,6 @@ via_keylog: #endif // no CONFIG_LEGACY_SCNKEY + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/scnkey_128.s b/c64/kernal/keyboard/scnkey_128.s index dbbeecdf..5243f5f8 100644 --- a/c64/kernal/keyboard/scnkey_128.s +++ b/c64/kernal/keyboard/scnkey_128.s @@ -1,8 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Keyboard scanning routine extension for C128 keyboards // -// - [CM128] Compute's Mapping the Commodore 128 - pages 212 (SHFLAG), 290 (matrix) +// - [CM128] Computes Mapping the Commodore 128 - pages 212 (SHFLAG), 290 (matrix) // @@ -65,3 +66,6 @@ scnkey_128_no_keys: #endif // CONFIG_KEYBOARD_C128 and no CONFIG_LEGACY_SCNKEY + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/scnkey_65.s b/c64/kernal/keyboard/scnkey_65.s index 5d3f5b58..5afb8adc 100644 --- a/c64/kernal/keyboard/scnkey_65.s +++ b/c64/kernal/keyboard/scnkey_65.s @@ -1,8 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Keyboard scanning routine extension for C65 keyboards // -// - [CM128] Compute's Mapping the Commodore 128 - pages 212 (SHFLAG) +// - [CM128] Computes Mapping the Commodore 128 - pages 212 (SHFLAG) // - https://github.com/MEGA65/c65-specifications/blob/master/c65manualupdated.txt (matrix) // @@ -63,3 +64,6 @@ scnkey_65_done: #endif // CONFIG_KEYBOARD_C65 and no CONFIG_LEGACY_SCNKEY + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/scnkey_legacy.s b/c64/kernal/keyboard/scnkey_legacy.s index fe25392b..50a68480 100644 --- a/c64/kernal/keyboard/scnkey_legacy.s +++ b/c64/kernal/keyboard/scnkey_legacy.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 295 -// - [CM64] Compute's Mapping the Commodore 64 - page 220 +// - [RG64] C64 Programmers Reference Guide - page 295 +// - [CM64] Computes Mapping the Commodore 64 - page 220 // // CPU registers that has to be preserved (see [RG64]): none // @@ -527,3 +528,6 @@ KeyRepeatWait: #endif // CONFIG_LEGACY_SCNKEY + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/scnkey_set_keytab.s b/c64/kernal/keyboard/scnkey_set_keytab.s index 6c9a03b1..711b0cdc 100644 --- a/c64/kernal/keyboard/scnkey_set_keytab.s +++ b/c64/kernal/keyboard/scnkey_set_keytab.s @@ -1,8 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Well-known Kernal routine, described in: // -// - [CM64] Compute's Mapping the Commodore 64 - pages 220, 221 +// - [CM64] Computes Mapping the Commodore 64 - pages 220, 221 // @@ -79,3 +80,6 @@ scnkey_toggle_if_needed: // entry for SCNKEY (TWW/CTR version) sta VIC_YMCSB !: rts + + +#endif // ROM layout diff --git a/c64/kernal/keyboard/udtim_keyboard.s b/c64/kernal/keyboard/udtim_keyboard.s index d35f86f6..10fdca11 100644 --- a/c64/kernal/keyboard/udtim_keyboard.s +++ b/c64/kernal/keyboard/udtim_keyboard.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Keyboard part of the UDTIM routine, has to preserve .Y @@ -48,3 +49,6 @@ udtim_keyboard: // unable to, for example, read the space bar status. rts + + +#endif // ROM layout diff --git a/c64/kernal/memory/fd15.restor.s b/c64/kernal/memory/fd15.restor.s index 5e181423..5e2eaf92 100644 --- a/c64/kernal/memory/fd15.restor.s +++ b/c64/kernal/memory/fd15.restor.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 293 (RESTOR), 304 (VECTOR) -// - [CM64] Compute's Mapping the Commodore 64 - page 237 +// - [RG64] C64 Programmers Reference Guide - page 293 (RESTOR), 304 (VECTOR) +// - [CM64] Computes Mapping the Commodore 64 - page 237 // // CPU registers that has to be preserved (see [RG64]): none // @@ -22,3 +23,6 @@ VECTOR: // placing it here would cause a collision with VECTOR defaults jmp vector_real + + +#endif // ROM layout diff --git a/c64/kernal/memory/fe25.memtop.s b/c64/kernal/memory/fe25.memtop.s index 960152b0..a5bf1602 100644 --- a/c64/kernal/memory/fe25.memtop.s +++ b/c64/kernal/memory/fe25.memtop.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 288 -// - [CM64] Compute's Mapping the Commodore 64 - page 240 +// - [RG64] C64 Programmers Reference Guide - page 288 +// - [CM64] Computes Mapping the Commodore 64 - page 240 // // CPU registers that has to be preserved (see [RG64]): .A // @@ -23,3 +24,6 @@ memtop_set: // for compatibility reasons this has to start at $FE2D stx MEMSIZK+0 rts + + +#endif // ROM layout diff --git a/c64/kernal/memory/membot.s b/c64/kernal/memory/membot.s index 84e6ce44..0da97fdc 100644 --- a/c64/kernal/memory/membot.s +++ b/c64/kernal/memory/membot.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 287/288 -// - [CM64] Compute's Mapping the Commodore 64 - page 240 +// - [RG64] C64 Programmers Reference Guide - page 287/288 +// - [CM64] Computes Mapping the Commodore 64 - page 240 // // CPU registers that has to be preserved (see [RG64]): .A // @@ -23,3 +24,6 @@ membot_set: stx MEMSTR+0 rts + + +#endif // ROM layout diff --git a/c64/kernal/memory/under_rom_routines.s b/c64/kernal/memory/under_rom_routines.s index 5e45aa15..a37ca4e7 100644 --- a/c64/kernal/memory/under_rom_routines.s +++ b/c64/kernal/memory/under_rom_routines.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // IMPORTANT: // These routines lengths cannot be changed without changing // the aliases for peek_under_roms, poke_under_roms etc @@ -66,3 +68,6 @@ memmap_allram_routine: __ram_routines_end: #endif // CONFIG_MEMORY_MODEL_60K + + +#endif // ROM layout diff --git a/c64/kernal/memory/vector_real.s b/c64/kernal/memory/vector_real.s index 5b3e4eff..7c9e62b3 100644 --- a/c64/kernal/memory/vector_real.s +++ b/c64/kernal/memory/vector_real.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) vector_real: @@ -6,7 +7,7 @@ vector_real: // address originally used; after calling VECTOR and checking zero page // area afterwards, the address could be found there - // According to 'Compute's Mapping the Commodore 64' page 237, + // According to 'Computes Mapping the Commodore 64' page 237, // the CBM implementation does not disable IRQs - yet, the // 'C64 Programmers Reference Guide' does not contain such // warning and does not mention any preparations needed. @@ -40,3 +41,6 @@ vector_end_loop: bpl vector_restore rts + + +#endif // ROM layout diff --git a/c64/kernal/panic.s b/c64/kernal/panic.s index ef34736a..c12318e6 100644 --- a/c64/kernal/panic.s +++ b/c64/kernal/panic.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Something terrible happened - show the panic screen @@ -72,3 +73,6 @@ kernal_panic_infinite_loop: bne kernal_panic_infinite_loop // branch always #endif // CONFIG_PANIC_SCREEN + + +#endif // ROM layout diff --git a/c64/kernal/print/print_features.s b/c64/kernal/print/print_features.s index 8c958a53..264d6b68 100644 --- a/c64/kernal/print/print_features.s +++ b/c64/kernal/print/print_features.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Print configured features on startup banner @@ -12,3 +13,6 @@ print_features: jmp print_kernal_message #endif // CONFIG_SHOW_FEATURES + + +#endif // ROM layout diff --git a/c64/kernal/print/print_hex_byte.s b/c64/kernal/print/print_hex_byte.s index fbb56c85..8b940ee2 100644 --- a/c64/kernal/print/print_hex_byte.s +++ b/c64/kernal/print/print_hex_byte.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Print the hex value in .A as two digits @@ -48,3 +49,6 @@ print_hex_byte: !: jmp JCHROUT #endif + + +#endif // ROM layout diff --git a/c64/kernal/print/print_kernal_message.s b/c64/kernal/print/print_kernal_message.s index 6e75e634..848308b3 100644 --- a/c64/kernal/print/print_kernal_message.s +++ b/c64/kernal/print/print_kernal_message.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Print one of the standard Kernal messages, index in .X @@ -13,3 +14,6 @@ print_kernal_message: bpl !- // 0 marks end of string and #$7F jmp JCHROUT + + +#endif // ROM layout diff --git a/c64/kernal/print/print_pal_ntsc.s b/c64/kernal/print/print_pal_ntsc.s index ec4ae805..06ec137c 100644 --- a/c64/kernal/print/print_pal_ntsc.s +++ b/c64/kernal/print/print_pal_ntsc.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Print video system on startup banner @@ -14,4 +15,7 @@ print_pal_ntsc: !: jmp print_kernal_message -#endif // CONFIG_SHOW_PAL_NTSC \ No newline at end of file +#endif // CONFIG_SHOW_PAL_NTSC + + +#endif // ROM layout diff --git a/c64/kernal/print/print_return.s b/c64/kernal/print/print_return.s index b53e8d6c..856f7fdf 100644 --- a/c64/kernal/print/print_return.s +++ b/c64/kernal/print/print_return.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Print the carriage return @@ -6,3 +7,6 @@ print_return: lda #$0D // carriage return code jmp JCHROUT + + +#endif // ROM layout diff --git a/c64/kernal/print/print_space.s b/c64/kernal/print/print_space.s index 48365891..2194d90e 100644 --- a/c64/kernal/print/print_space.s +++ b/c64/kernal/print/print_space.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Print the space character @@ -6,3 +7,6 @@ print_space: lda #$20 // space code jmp JCHROUT + + +#endif // ROM layout diff --git a/c64/kernal/print/printf.s b/c64/kernal/print/printf.s index 44738e47..6c8bba6d 100644 --- a/c64/kernal/print/printf.s +++ b/c64/kernal/print/printf.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // printf()-like routine for simplifying debugging // Prints the literal zero-terminated string that follows, @@ -141,3 +143,5 @@ printf_retreat: #endif // CONFIG_DBG_PRINTF + +#endif // ROM layout diff --git a/c64/kernal/rom_revision/ff80.kernal_revision.s b/c64/kernal/rom_revision/ff80.kernal_revision.s index 0aad2a67..9bdc83c3 100644 --- a/c64/kernal/rom_revision/ff80.kernal_revision.s +++ b/c64/kernal/rom_revision/ff80.kernal_revision.s @@ -1,8 +1,9 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // This byte (hex $FF80, dec 65408) identifies Kernal revision on several machines. Although not all // of the, used it for versioning purpose, here is the list of all the values I could find. Sources: -// - [CM64] Compute's Mapping the Commodore 64 (page 242/243) +// - [CM64] Computes Mapping the Commodore 64 (page 242/243) // - [MM] Marko Mäkelä article, http://www.zimmers.net/anonftp/pub/cbm/firmware/computers/c64/revisions.txt // - [VICE] Checked with ROMs included in VICE emulator // - [XEMU] Checked with ROMs retrieved by XEMU emulator @@ -59,5 +60,9 @@ // - $FF - Commander X16 (emulator r28) // + kernal_revision: .byte $F0 // chosen not to conflict with anything known so far + + +#endif // ROM layout diff --git a/c64/kernal/rs232/chkin_rs232_up2400.s b/c64/kernal/rs232/chkin_rs232_up2400.s index 0fb045b5..646a4b31 100644 --- a/c64/kernal/rs232/chkin_rs232_up2400.s +++ b/c64/kernal/rs232/chkin_rs232_up2400.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // RS-232 part of the CHKIN routine @@ -12,3 +13,6 @@ chkin_rs232: #endif // CONFIG_RS232_UP2400 + + +#endif // ROM layout diff --git a/c64/kernal/rs232/chkin_rs232_up9600.s b/c64/kernal/rs232/chkin_rs232_up9600.s index 40d4e2ac..8072c372 100644 --- a/c64/kernal/rs232/chkin_rs232_up9600.s +++ b/c64/kernal/rs232/chkin_rs232_up9600.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // // RS-232 part of the CHKIN routine @@ -46,3 +48,6 @@ chkin_rs232_nochkin #endif // CONFIG_RS232_UP9600 + + +#endif // ROM layout diff --git a/c64/kernal/rs232/chrin_rs232_up2400.s b/c64/kernal/rs232/chrin_rs232_up2400.s index 252cf2db..4ac6c3dd 100644 --- a/c64/kernal/rs232/chrin_rs232_up2400.s +++ b/c64/kernal/rs232/chrin_rs232_up2400.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // RS-232 part of the CHRIN routine @@ -12,3 +13,6 @@ chrin_rs232: #endif // CONFIG_RS232_UP2400 + + +#endif // ROM layout diff --git a/c64/kernal/rs232/chrin_rs232_up9600.s b/c64/kernal/rs232/chrin_rs232_up9600.s index 0945111d..afc6e489 100644 --- a/c64/kernal/rs232/chrin_rs232_up9600.s +++ b/c64/kernal/rs232/chrin_rs232_up9600.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // RS-232 part of the CHRIN routine @@ -41,3 +42,6 @@ XXX_DOGET4: #endif // CONFIG_RS232_UP9600 + + +#endif // ROM layout diff --git a/c64/kernal/rs232/chrout_rs232.s b/c64/kernal/rs232/chrout_rs232.s index 9c3af02f..31938cf0 100644 --- a/c64/kernal/rs232/chrout_rs232.s +++ b/c64/kernal/rs232/chrout_rs232.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // RS-232 part of the CHROUT routine @@ -12,3 +13,6 @@ chrout_rs232: #endif // HAS_RS232 + + +#endif // ROM layout diff --git a/c64/kernal/rs232/ckout_rs232_up2400.s b/c64/kernal/rs232/ckout_rs232_up2400.s index 7cec81d6..a526891e 100644 --- a/c64/kernal/rs232/ckout_rs232_up2400.s +++ b/c64/kernal/rs232/ckout_rs232_up2400.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // RS-232 part of the CKOUT routine @@ -12,3 +13,6 @@ ckout_rs232: #endif // CONFIG_RS232_UP2400 + + +#endif // ROM layout diff --git a/c64/kernal/rs232/ckout_rs232_up9600.s b/c64/kernal/rs232/ckout_rs232_up9600.s index e2877512..4c6a6535 100644 --- a/c64/kernal/rs232/ckout_rs232_up9600.s +++ b/c64/kernal/rs232/ckout_rs232_up9600.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // RS-232 part of the CKOUT routine @@ -21,3 +22,6 @@ ckout_rs232: #endif // CONFIG_RS232_UP9600 + + +#endif // ROM layout diff --git a/c64/kernal/rs232/close_rs232.s b/c64/kernal/rs232/close_rs232.s index 52d4bf84..c270f473 100644 --- a/c64/kernal/rs232/close_rs232.s +++ b/c64/kernal/rs232/close_rs232.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // RS-232 part of the CLOSE routine @@ -40,3 +41,6 @@ close_rs232_end: #endif // HAS_RS232 + + +#endif // ROM layout diff --git a/c64/kernal/rs232/getin_rs232.s b/c64/kernal/rs232/getin_rs232.s index 17215ead..b6a01d29 100644 --- a/c64/kernal/rs232/getin_rs232.s +++ b/c64/kernal/rs232/getin_rs232.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // RS-232 part of the GETIN routine @@ -12,3 +13,6 @@ getin_rs232: #endif // HAS_RS232 + + +#endif // ROM layout diff --git a/c64/kernal/rs232/open_rs232.s b/c64/kernal/rs232/open_rs232.s index f4b1c0a0..864d8487 100644 --- a/c64/kernal/rs232/open_rs232.s +++ b/c64/kernal/rs232/open_rs232.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // RS-232 part of the OPEN routine @@ -58,3 +59,6 @@ open_rs232_end: #endif // HAS_RS232 + + +#endif // ROM layout diff --git a/c64/kernal/rs232/rs232_count_channels.s b/c64/kernal/rs232/rs232_count_channels.s index 7e032781..1ff4cb8a 100644 --- a/c64/kernal/rs232/rs232_count_channels.s +++ b/c64/kernal/rs232/rs232_count_channels.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Sets .X to number of open RS-232 channels @@ -24,3 +25,6 @@ rs232_count_channels: #endif + + +#endif // ROM layout diff --git a/c64/kernal/rs232/up9600_disable.s b/c64/kernal/rs232/up9600_disable.s index 80ec3cc4..603a246f 100644 --- a/c64/kernal/rs232/up9600_disable.s +++ b/c64/kernal/rs232/up9600_disable.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Disable UP9600 interface @@ -42,3 +43,6 @@ up9600_disable: // XXX adapt #endif // CONFIG_RS232_UP9600 + + +#endif // ROM layout diff --git a/c64/kernal/rs232/up9600_enable.s b/c64/kernal/rs232/up9600_enable.s index f282588c..96a1e893 100644 --- a/c64/kernal/rs232/up9600_enable.s +++ b/c64/kernal/rs232/up9600_enable.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Enable UP9600 interface support @@ -128,6 +129,7 @@ INSTERR rts - - #endif // CONFIG_RS232_UP9600 + + +#endif // ROM layout \ No newline at end of file diff --git a/c64/kernal/rs232/up9600_ihitab.s b/c64/kernal/rs232/up9600_ihitab.s index 05310e40..c0eb5793 100644 --- a/c64/kernal/rs232/up9600_ihitab.s +++ b/c64/kernal/rs232/up9600_ihitab.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Timer values for PAL/NTSC - high bytes @@ -16,3 +17,6 @@ up9600_ihitab: #endif // CONFIG_RS232_UP9600 + + +#endif // ROM layout diff --git a/c64/kernal/rs232/up9600_ilotab.s b/c64/kernal/rs232/up9600_ilotab.s index bede02ea..e6fbf3a0 100644 --- a/c64/kernal/rs232/up9600_ilotab.s +++ b/c64/kernal/rs232/up9600_ilotab.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Timer values for PAL/NTSC - low bytes @@ -16,3 +17,6 @@ up9600_ilotab: #endif // CONFIG_RS232_UP9600 + + +#endif // ROM layout diff --git a/c64/kernal/rs232/up9600_irq.s b/c64/kernal/rs232/up9600_irq.s index a5a99e0e..f6dc79ac 100644 --- a/c64/kernal/rs232/up9600_irq.s +++ b/c64/kernal/rs232/up9600_irq.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // RS-232 IRQ handler part @@ -38,3 +39,6 @@ up9600_irq_end: #endif // CONFIG_RS232_UP9600 + + +#endif // ROM layout diff --git a/c64/kernal/rs232/up9600_nmi.s b/c64/kernal/rs232/up9600_nmi.s index fea3652d..c9945ed3 100644 --- a/c64/kernal/rs232/up9600_nmi.s +++ b/c64/kernal/rs232/up9600_nmi.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // RS-232 NMI handler part @@ -64,3 +65,6 @@ NMIBYTR2 rti #endif // CONFIG_RS232_UP9600 + + +#endif // ROM layout diff --git a/c64/kernal/rs232/up9600_rsin.s b/c64/kernal/rs232/up9600_rsin.s index 39009f0c..8151d338 100644 --- a/c64/kernal/rs232/up9600_rsin.s +++ b/c64/kernal/rs232/up9600_rsin.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Get byte from serial interface @@ -41,3 +42,6 @@ up9600_rsin_end: rts #endif // CONFIG_RS232_UP9600 + + +#endif // ROM layout diff --git a/c64/kernal/rs232/up9600_rsout.s b/c64/kernal/rs232/up9600_rsout.s index fd4e607d..93b847e8 100644 --- a/c64/kernal/rs232/up9600_rsout.s +++ b/c64/kernal/rs232/up9600_rsout.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Put byte to serial interface @@ -54,3 +55,6 @@ rs232_rsout_wait: #endif // CONFIG_RS232_UP9600 + + +#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen.s b/c64/kernal/screen/chrout_screen.s index 36f80d85..d8dadce8 100644 --- a/c64/kernal/screen/chrout_screen.s +++ b/c64/kernal/screen/chrout_screen.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // CHROUT routine - screen support (character output) @@ -128,3 +129,6 @@ chrout_screen_done: jsr cursor_show_if_enabled jmp chrout_done_success + + +#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_clr.s b/c64/kernal/screen/chrout_screen_clr.s index 75be3574..3f3d2599 100644 --- a/c64/kernal/screen/chrout_screen_clr.s +++ b/c64/kernal/screen/chrout_screen_clr.s @@ -1,9 +1,14 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // CLR key handling within CHROUT // + chrout_screen_CLR: jsr clear_screen jmp chrout_screen_calc_lptr_done + + +#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_control.s b/c64/kernal/screen/chrout_screen_control.s index 05f5f828..ad5cd563 100644 --- a/c64/kernal/screen/chrout_screen_control.s +++ b/c64/kernal/screen/chrout_screen_control.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // CHROUT routine - screen support, control codes @@ -66,3 +67,6 @@ chrout_try_color_loop: // Unknown code, or key not requiring any handling jmp chrout_screen_done + + +#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_crsr.s b/c64/kernal/screen/chrout_screen_crsr.s index 2b8cb339..13f22bd0 100644 --- a/c64/kernal/screen/chrout_screen_crsr.s +++ b/c64/kernal/screen/chrout_screen_crsr.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Cursor keys handling within CHROUT @@ -53,3 +54,6 @@ chrout_screen_CRSR_LEFT: lda #39 sta PNTR bne chrout_screen_CRSR_done // branch always + + +#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_del.s b/c64/kernal/screen/chrout_screen_del.s index 2b02b6af..6036228b 100644 --- a/c64/kernal/screen/chrout_screen_del.s +++ b/c64/kernal/screen/chrout_screen_del.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // CHROUT routine - screen support, DEL key handling @@ -83,3 +84,6 @@ chrout_screen_del_column_normal: chrout_screen_del_done: jmp chrout_screen_calc_lptr_done + + +#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_gfxtxt.s b/c64/kernal/screen/chrout_screen_gfxtxt.s index e523e03b..f1e8486e 100644 --- a/c64/kernal/screen/chrout_screen_gfxtxt.s +++ b/c64/kernal/screen/chrout_screen_gfxtxt.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // GFX/TXT mode switch handling within CHROUT @@ -17,3 +18,6 @@ chrout_screen_TXT: lda VIC_YMCSB ora #$02 // to lower case bne !- // branch always + + +#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_home.s b/c64/kernal/screen/chrout_screen_home.s index 7acbbe12..6dc1c559 100644 --- a/c64/kernal/screen/chrout_screen_home.s +++ b/c64/kernal/screen/chrout_screen_home.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // HOME key handling within CHROUT @@ -8,3 +9,6 @@ chrout_screen_HOME: jsr cursor_home jmp chrout_screen_calc_lptr_done + + +#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_ins.s b/c64/kernal/screen/chrout_screen_ins.s index 3e2b2fbe..dd1e60b6 100644 --- a/c64/kernal/screen/chrout_screen_ins.s +++ b/c64/kernal/screen/chrout_screen_ins.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // CHROUT routine - screen support, INS key handling @@ -91,3 +92,6 @@ chrout_screen_ins_copy_loop: // Return from loop rts + + +#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_jumptable_codes.s b/c64/kernal/screen/chrout_screen_jumptable_codes.s index 321309bc..57252b9f 100644 --- a/c64/kernal/screen/chrout_screen_jumptable_codes.s +++ b/c64/kernal/screen/chrout_screen_jumptable_codes.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Jumptable for screen control codes support. To improve performance, should be sorted @@ -116,3 +117,6 @@ chrout_screen_jumptable: .word chrout_screen_RETURN #endif + + +#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_quote.s b/c64/kernal/screen/chrout_screen_quote.s index 7cdf875e..1ddd0c64 100644 --- a/c64/kernal/screen/chrout_screen_quote.s +++ b/c64/kernal/screen/chrout_screen_quote.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // CHROUT routine - screen support, control codes in quote mode @@ -18,3 +19,6 @@ chrout_screen_quote: adc #$BF // C=1, so adding $BF + C = add $C0 !: jmp chrout_screen_literal + + +#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_return.s b/c64/kernal/screen/chrout_screen_return.s index 283c4389..40af4342 100644 --- a/c64/kernal/screen/chrout_screen_return.s +++ b/c64/kernal/screen/chrout_screen_return.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // RETURN key handling within CHROUT @@ -27,3 +28,6 @@ chrout_screen_RETURN: jsr screen_calculate_PNT_USER !: jmp screen_advance_to_next_line + + +#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_rvs.s b/c64/kernal/screen/chrout_screen_rvs.s index b1f68b76..283c2649 100644 --- a/c64/kernal/screen/chrout_screen_rvs.s +++ b/c64/kernal/screen/chrout_screen_rvs.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // RVS ON/OFF handling within CHROUT @@ -15,3 +16,6 @@ chrout_screen_RVS_OFF: !: sta RVS jmp chrout_screen_done + + +#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_shift_onoff.s b/c64/kernal/screen/chrout_screen_shift_onoff.s index 4f56ebac..b0e0ca57 100644 --- a/c64/kernal/screen/chrout_screen_shift_onoff.s +++ b/c64/kernal/screen/chrout_screen_shift_onoff.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // SHIFT ON/OFF handling within CHROUT @@ -15,3 +16,6 @@ chrout_screen_SHIFT_OFF: lda #$80 // disable SHIFT+VENDOR combination bne !- // branch always + + +#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_stop.s b/c64/kernal/screen/chrout_screen_stop.s index 179c217f..7a96d3e1 100644 --- a/c64/kernal/screen/chrout_screen_stop.s +++ b/c64/kernal/screen/chrout_screen_stop.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // STOP key handling within CHROUT @@ -16,3 +17,6 @@ chrout_screen_STOP: #endif + + +#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_tab.s b/c64/kernal/screen/chrout_screen_tab.s index efc556ca..f07e8d61 100644 --- a/c64/kernal/screen/chrout_screen_tab.s +++ b/c64/kernal/screen/chrout_screen_tab.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Tabulation keys handling within CHROUT @@ -37,3 +38,6 @@ chrout_screen_TAB_BW: #endif // CONFIG_EDIT_TABULATORS + + +#endif // ROM layout diff --git a/c64/kernal/screen/cursor.s b/c64/kernal/screen/cursor.s index 2e2d2748..f901e91a 100644 --- a/c64/kernal/screen/cursor.s +++ b/c64/kernal/screen/cursor.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Variables used: @@ -78,3 +79,6 @@ cursor_blink_timer_reset: cursor_blink_end: rts + + +#endif // ROM layout diff --git a/c64/kernal/screen/cursor_enable.s b/c64/kernal/screen/cursor_enable.s index 09b53906..9ea0c8ca 100644 --- a/c64/kernal/screen/cursor_enable.s +++ b/c64/kernal/screen/cursor_enable.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Variables used: @@ -9,3 +10,6 @@ cursor_enable: lda #$00 sta BLNSW rts + + +#endif // ROM layout diff --git a/c64/kernal/screen/cursor_show.s b/c64/kernal/screen/cursor_show.s index 6cd78afe..2e66f5bf 100644 --- a/c64/kernal/screen/cursor_show.s +++ b/c64/kernal/screen/cursor_show.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Variables used: @@ -33,3 +34,6 @@ cursor_show: cursor_show_end: rts + + +#endif // ROM layout diff --git a/c64/kernal/screen/e50a.plot.s b/c64/kernal/screen/e50a.plot.s index 014c5c07..d23ea917 100644 --- a/c64/kernal/screen/e50a.plot.s +++ b/c64/kernal/screen/e50a.plot.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 290 -// - [CM64] Compute's Mapping the Commodore 64 - page 215 +// - [RG64] C64 Programmers Reference Guide - page 290 +// - [CM64] Computes Mapping the Commodore 64 - page 215 // // CPU registers that has to be preserved (see [RG64]): none // @@ -32,3 +33,6 @@ plot_get: ldy PNTR ldx TBLX rts + + +#endif // ROM layout diff --git a/c64/kernal/screen/e544.clear_screen.s b/c64/kernal/screen/e544.clear_screen.s index 1ee9bec9..affc4f5f 100644 --- a/c64/kernal/screen/e544.clear_screen.s +++ b/c64/kernal/screen/e544.clear_screen.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Clear screen and initialise line link table, described in: @@ -28,3 +29,6 @@ clear_screen: // Fall to cursor home routine jmp cursor_home + + +#endif // ROM layout diff --git a/c64/kernal/screen/e566.cursor_home.s b/c64/kernal/screen/e566.cursor_home.s index e5c22d17..b66ffb7c 100644 --- a/c64/kernal/screen/e566.cursor_home.s +++ b/c64/kernal/screen/e566.cursor_home.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Home the cursor, described in: @@ -13,3 +14,6 @@ cursor_home: sta TBLX // current row // FALLTROUGH to the next routine + + +#endif // ROM layout diff --git a/c64/kernal/screen/e56c.screen_calculate_pnt_user.s b/c64/kernal/screen/e56c.screen_calculate_pnt_user.s index bb24ddfc..9a3ed016 100644 --- a/c64/kernal/screen/e56c.screen_calculate_pnt_user.s +++ b/c64/kernal/screen/e56c.screen_calculate_pnt_user.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Set pointer (PNT) to current screen line , described in: @@ -53,3 +54,6 @@ screen_calculate_USER: sta USER+1 rts + + +#endif // ROM layout diff --git a/c64/kernal/screen/e8ea.screen_scroll_up.s b/c64/kernal/screen/e8ea.screen_scroll_up.s index af216001..169a0783 100644 --- a/c64/kernal/screen/e8ea.screen_scroll_up.s +++ b/c64/kernal/screen/e8ea.screen_scroll_up.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Scroll the whole screen up by 1 logical line, described in: @@ -128,3 +129,6 @@ screen_scroll_up_loop_done: // Recalculate PNT and USER jmp screen_calculate_PNT_USER + + +#endif // ROM layout diff --git a/c64/kernal/screen/e9ff.screen_clear_line.s b/c64/kernal/screen/e9ff.screen_clear_line.s index fc347e18..049b5a60 100644 --- a/c64/kernal/screen/e9ff.screen_clear_line.s +++ b/c64/kernal/screen/e9ff.screen_clear_line.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Well-known routine, described in: @@ -32,3 +33,6 @@ screen_clear_line: // Done rts + + +#endif // ROM layout diff --git a/c64/kernal/screen/screen.s b/c64/kernal/screen/screen.s index 6964d141..1f2a4ec6 100644 --- a/c64/kernal/screen/screen.s +++ b/c64/kernal/screen/screen.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: @@ -8,6 +9,7 @@ // CPU registers that has to be preserved (see [RG64]): .A // + SCREEN: // There are only 2 sane ways to implement this routine, @@ -17,3 +19,5 @@ SCREEN: ldx #40 // 40 rows rts + +#endif // ROM layout diff --git a/c64/kernal/screen/screen_advance_to_next_line.s b/c64/kernal/screen/screen_advance_to_next_line.s index e83be7b4..73b0528c 100644 --- a/c64/kernal/screen/screen_advance_to_next_line.s +++ b/c64/kernal/screen/screen_advance_to_next_line.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) screen_advance_to_next_line: @@ -17,3 +18,6 @@ screen_advance_to_next_line: sta PNTR jmp chrout_screen_calc_lptr_done + + +#endif // ROM layout diff --git a/c64/kernal/screen/screen_calculate_pntr_lnmx.s b/c64/kernal/screen/screen_calculate_pntr_lnmx.s index b6645ba8..b97e9251 100644 --- a/c64/kernal/screen/screen_calculate_pntr_lnmx.s +++ b/c64/kernal/screen/screen_calculate_pntr_lnmx.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Sets PNTR in a proper range (0-39 or 40-79) @@ -58,3 +59,6 @@ screen_calculate_lnmx_79: lda #79 sta LNMX rts + + +#endif // ROM layout diff --git a/c64/kernal/screen/screen_check_space_ends_line.s b/c64/kernal/screen/screen_check_space_ends_line.s index cbd641f3..59cb427c 100644 --- a/c64/kernal/screen/screen_check_space_ends_line.s +++ b/c64/kernal/screen/screen_check_space_ends_line.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + screen_check_space_ends_line: @@ -8,3 +10,5 @@ screen_check_space_ends_line: rts + +#endif // ROM layout diff --git a/c64/kernal/screen/screen_code_to_petscii.s b/c64/kernal/screen/screen_code_to_petscii.s index 3485a3b9..883afe85 100644 --- a/c64/kernal/screen/screen_code_to_petscii.s +++ b/c64/kernal/screen/screen_code_to_petscii.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + screen_code_to_petscii: cmp #$1B @@ -34,3 +36,6 @@ s2p_adc_40: s2p_end: rts + + +#endif // ROM layout diff --git a/c64/kernal/screen/screen_get_cliped_pntr.s b/c64/kernal/screen/screen_get_cliped_pntr.s index 413641ad..8db99846 100644 --- a/c64/kernal/screen/screen_get_cliped_pntr.s +++ b/c64/kernal/screen/screen_get_cliped_pntr.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Get PNTR value clipped to 0-39 range in .Y, sets flags to compare with 0, can trash .A @@ -14,3 +15,6 @@ screen_get_clipped_PNTR: !: cpy #$00 rts + + +#endif // ROM layout \ No newline at end of file diff --git a/c64/kernal/screen/screen_get_logical_line_end_ptr.s b/c64/kernal/screen/screen_get_logical_line_end_ptr.s index d396db35..a0588006 100644 --- a/c64/kernal/screen/screen_get_logical_line_end_ptr.s +++ b/c64/kernal/screen/screen_get_logical_line_end_ptr.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) screen_get_logical_line_end_ptr: @@ -22,4 +23,7 @@ screen_get_logical_line_end_79: screen_get_logical_line_end_39: ldy #39 - rts \ No newline at end of file + rts + + +#endif // ROM layout diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index b16d52b7..65bc33f2 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) screen_grow_logical_line_done_scroll: @@ -138,3 +139,6 @@ screen_grow_logical_line_copy_done: inx jsr screen_clear_line jmp screen_calculate_PNTR_LNMX + + +#endif // ROM layout diff --git a/c64/kernal/screen/screen_off.s b/c64/kernal/screen/screen_off.s index c8f811d8..572e3394 100644 --- a/c64/kernal/screen/screen_off.s +++ b/c64/kernal/screen/screen_off.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Helper routine to blank screen @@ -26,3 +27,6 @@ screen_off: #endif + + +#endif // ROM layout diff --git a/c64/kernal/screen/screen_on.s b/c64/kernal/screen/screen_on.s index 4742321b..508355ce 100644 --- a/c64/kernal/screen/screen_on.s +++ b/c64/kernal/screen/screen_on.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Helper routine to show screen @@ -16,3 +17,6 @@ screen_on: rts #endif + + +#endif // ROM layout diff --git a/c64/kernal/screen/screen_preserve_sal_eal.s b/c64/kernal/screen/screen_preserve_sal_eal.s index 175c51bc..25e37c94 100644 --- a/c64/kernal/screen/screen_preserve_sal_eal.s +++ b/c64/kernal/screen/screen_preserve_sal_eal.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) screen_preserve_sal_eal: @@ -29,3 +30,6 @@ screen_common_sal_eal: phy_trash_a phx_trash_a rts + + +#endif // ROM layout diff --git a/c64/kernal/screen/screen_restore_sal_eal.s b/c64/kernal/screen/screen_restore_sal_eal.s index cfa85fd9..ad46c66e 100644 --- a/c64/kernal/screen/screen_restore_sal_eal.s +++ b/c64/kernal/screen/screen_restore_sal_eal.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) screen_restore_sal_eal: @@ -23,4 +24,7 @@ screen_restore_sal_eal: sta SAL+0 jmp screen_common_sal_eal + + + #endif // ROM layout \ No newline at end of file diff --git a/c64/kernal/tape/load_tape_normal.s b/c64/kernal/tape/load_tape_normal.s index d35d59ce..1b77bf5f 100644 --- a/c64/kernal/tape/load_tape_normal.s +++ b/c64/kernal/tape/load_tape_normal.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Tape (normal) part of the LOAD routine @@ -133,3 +134,6 @@ load_tape_normal_payload: #endif + + +#endif // ROM layout diff --git a/c64/kernal/tape/load_tape_turbo.s b/c64/kernal/tape/load_tape_turbo.s index d70facfc..2ce2a528 100644 --- a/c64/kernal/tape/load_tape_turbo.s +++ b/c64/kernal/tape/load_tape_turbo.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Tape (turbo) part of the LOAD routine @@ -136,3 +137,6 @@ load_tape_turbo_loop: #endif // CONFIG_TAPE_TURBO + + +#endif // ROM layout diff --git a/c64/kernal/tape/tape_common.s b/c64/kernal/tape/tape_common.s index ee56f8ac..90651acd 100644 --- a/c64/kernal/tape/tape_common.s +++ b/c64/kernal/tape/tape_common.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Common routines for tape support @@ -311,3 +312,6 @@ tape_load_error: #endif + + +#endif // ROM layout diff --git a/c64/kernal/tape/tape_common_clean_sid.s b/c64/kernal/tape/tape_common_clean_sid.s index fa135bf4..f054e91b 100644 --- a/c64/kernal/tape/tape_common_clean_sid.s +++ b/c64/kernal/tape/tape_common_clean_sid.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Clear the SID settings - for sound effects during LOAD @@ -20,3 +21,6 @@ tape_clean_sid: #endif + + +#endif // ROM layout diff --git a/c64/kernal/tape/tape_common_ditch_verify.s b/c64/kernal/tape/tape_common_ditch_verify.s index c0c6edb0..8fee8722 100644 --- a/c64/kernal/tape/tape_common_ditch_verify.s +++ b/c64/kernal/tape/tape_common_ditch_verify.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Check if VERIFY asked - if yes, terminate loading @@ -19,3 +20,6 @@ tape_ditch_verify: #endif + + +#endif // ROM layout diff --git a/c64/kernal/tape/tape_common_motor.s b/c64/kernal/tape/tape_common_motor.s index 800a25df..2526f062 100644 --- a/c64/kernal/tape/tape_common_motor.s +++ b/c64/kernal/tape/tape_common_motor.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Handle tape deck motor @@ -23,3 +24,6 @@ tape_motor_on: #endif + + +#endif // ROM layout diff --git a/c64/kernal/tape/tape_common_screen.s b/c64/kernal/tape/tape_common_screen.s index f8fb8814..737888f3 100644 --- a/c64/kernal/tape/tape_common_screen.s +++ b/c64/kernal/tape/tape_common_screen.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Handle screen (visible/blanked) + tape deck motor (on/off), @@ -25,3 +26,6 @@ tape_screen_off_motor_on: jmp tape_motor_on #endif + + +#endif // ROM layout diff --git a/c64/kernal/tape/tape_normal_get_bit.s b/c64/kernal/tape/tape_normal_get_bit.s index 54f9b969..fdd29b0e 100644 --- a/c64/kernal/tape/tape_normal_get_bit.s +++ b/c64/kernal/tape/tape_normal_get_bit.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Tape (normal) helper routine - bit reading @@ -55,3 +56,6 @@ tape_normal_get_bit_error: #endif // CONFIG_TAPE_NORMAL + + +#endif // ROM layout diff --git a/c64/kernal/tape/tape_normal_get_byte.s b/c64/kernal/tape/tape_normal_get_byte.s index d63c1d0d..94634a65 100644 --- a/c64/kernal/tape/tape_normal_get_byte.s +++ b/c64/kernal/tape/tape_normal_get_byte.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Tape (normal) helper routine - byte reading @@ -68,3 +69,6 @@ tape_normal_get_byte_error: #endif + + +#endif // ROM layout diff --git a/c64/kernal/tape/tape_normal_get_data.s b/c64/kernal/tape/tape_normal_get_data.s index 21972deb..498113bf 100644 --- a/c64/kernal/tape/tape_normal_get_data.s +++ b/c64/kernal/tape/tape_normal_get_data.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Tape (normal) helper routine - data block reading @@ -71,3 +72,6 @@ tape_normal_get_block_done: #endif + + +#endif // ROM layout diff --git a/c64/kernal/tape/tape_normal_get_marker.s b/c64/kernal/tape/tape_normal_get_marker.s index eaa6c219..fbe40095 100644 --- a/c64/kernal/tape/tape_normal_get_marker.s +++ b/c64/kernal/tape/tape_normal_get_marker.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // // Tape (normal) helper routine - marker reading @@ -21,3 +23,6 @@ tape_normal_get_marker: #endif + + +#endif // ROM layout diff --git a/c64/kernal/tape/tape_normal_get_pulse.s b/c64/kernal/tape/tape_normal_get_pulse.s index cbddc175..82a41858 100644 --- a/c64/kernal/tape/tape_normal_get_pulse.s +++ b/c64/kernal/tape/tape_normal_get_pulse.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // // Tape (normal) helper routine - pulse reading @@ -39,3 +41,6 @@ tape_normal_get_pulse: #endif + + +#endif // ROM layout diff --git a/c64/kernal/tape/tape_normal_pilot.s b/c64/kernal/tape/tape_normal_pilot.s index a6f1e577..28b461a6 100644 --- a/c64/kernal/tape/tape_normal_pilot.s +++ b/c64/kernal/tape/tape_normal_pilot.s @@ -1,3 +1,5 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + // // Tape (turbo) helper routine - handling the pilot @@ -70,3 +72,6 @@ tape_normal_pilot_header: // require 128x $40 pulses #endif + + +#endif // ROM layout diff --git a/c64/kernal/tape/tape_normal_sync.s b/c64/kernal/tape/tape_normal_sync.s index 7969f958..b24a0b9a 100644 --- a/c64/kernal/tape/tape_normal_sync.s +++ b/c64/kernal/tape/tape_normal_sync.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Tape (turbo) helper routine - synchronization handling @@ -35,3 +36,6 @@ tape_normal_sync_fail: #endif + + +#endif // ROM layout diff --git a/c64/kernal/tape/tape_turbo_bytestore.s b/c64/kernal/tape/tape_turbo_bytestore.s index 66c94081..09f793b7 100644 --- a/c64/kernal/tape/tape_turbo_bytestore.s +++ b/c64/kernal/tape/tape_turbo_bytestore.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Tape (turbo) helper routine - storing byte uder I/O @@ -38,3 +39,6 @@ __tape_turbo_bytestore_source_end: #endif // CONFIG_TAPE_TURBO + + +#endif // ROM layout diff --git a/c64/kernal/tape/tape_turbo_get_bit.s b/c64/kernal/tape/tape_turbo_get_bit.s index a6cf343a..2f616008 100644 --- a/c64/kernal/tape/tape_turbo_get_bit.s +++ b/c64/kernal/tape/tape_turbo_get_bit.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Tape (turbo) helper routine - bit reading @@ -36,3 +37,6 @@ tape_turbo_get_bit: #endif // CONFIG_TAPE_TURBO + + +#endif // ROM layout diff --git a/c64/kernal/tape/tape_turbo_get_byte.s b/c64/kernal/tape/tape_turbo_get_byte.s index d1ee0ded..ec8683aa 100644 --- a/c64/kernal/tape/tape_turbo_get_byte.s +++ b/c64/kernal/tape/tape_turbo_get_byte.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Tape (turbo) helper routine - byte reading @@ -26,3 +27,6 @@ tape_turbo_get_byte: #endif // CONFIG_TAPE_TURBO + + +#endif // ROM layout diff --git a/c64/kernal/tape/tape_turbo_sync.s b/c64/kernal/tape/tape_turbo_sync.s index 1c1aedc6..a81c272c 100644 --- a/c64/kernal/tape/tape_turbo_sync.s +++ b/c64/kernal/tape/tape_turbo_sync.s @@ -1,3 +1,4 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Tape (turbo) helper routine - synchronization handling @@ -54,3 +55,6 @@ tape_turbo_sync_payload: #endif // CONFIG_TAPE_TURBO + + +#endif // ROM layout diff --git a/c64/kernal/time/rdtim.s b/c64/kernal/time/rdtim.s index 37009289..19916b2e 100644 --- a/c64/kernal/time/rdtim.s +++ b/c64/kernal/time/rdtim.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 291 -// - [CM64] Compute's Mapping the Commodore 64 - page 232 +// - [RG64] C64 Programmers Reference Guide - page 291 +// - [CM64] Computes Mapping the Commodore 64 - page 232 // // CPU registers that has to be preserved (see [RG64]): none // @@ -11,7 +12,7 @@ RDTIM: // Disable interrupts for the duration of the routine, to prevent - // jiffy clock update while reeading it's values + // jiffy clock update while reeading its values sei // Store the jiffy clock state @@ -25,3 +26,5 @@ RDTIM: cli rts + +#endif // ROM layout diff --git a/c64/kernal/time/settim.s b/c64/kernal/time/settim.s index 0bceeaf8..2c919e01 100644 --- a/c64/kernal/time/settim.s +++ b/c64/kernal/time/settim.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 299/300 -// - [CM64] Compute's Mapping the Commodore 64 - page 232 +// - [RG64] C64 Programmers Reference Guide - page 299/300 +// - [CM64] Computes Mapping the Commodore 64 - page 232 // // CPU registers that has to be preserved (see [RG64]): .A, .X, .Y // @@ -11,7 +12,7 @@ SETTIM: // Disable interrupts for the duration of the routine, to prevent - // jiffy clock update while changing it's values + // jiffy clock update while changing its values sei // Store the jiffy clock state @@ -25,3 +26,5 @@ SETTIM: cli rts + +#endif // ROM layout diff --git a/c64/kernal/time/udtim.s b/c64/kernal/time/udtim.s index 01bb3b91..0374cfb6 100644 --- a/c64/kernal/time/udtim.s +++ b/c64/kernal/time/udtim.s @@ -1,9 +1,10 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // // Official Kernal routine, described in: // -// - [RG64] C64 Programmer's Reference Guide - page 303 -// - [CM64] Compute's Mapping the Commodore 64 - pages 27, 232 +// - [RG64] C64 Programmers Reference Guide - page 303 +// - [CM64] Computes Mapping the Commodore 64 - pages 27, 232 // // CPU registers that has to be preserved (see [RG64]): .Y // @@ -43,3 +44,6 @@ udtim_clock_rollover: sta TIME+2 sta TIME+1 beq udtim_time_done // done with clock - will always jump + + +#endif // ROM layout diff --git a/src/build_segment.cc b/src/build_segment.cc index d1dc4e59..67c85dbf 100644 --- a/src/build_segment.cc +++ b/src/build_segment.cc @@ -36,6 +36,7 @@ std::string CMD_outFile = "OUT.BIN"; std::string CMD_outDir = "./out"; std::string CMD_segName = "MAIN"; std::string CMD_segInfo = "(unnamed)"; +std::string CMD_romLayout = "STD"; int CMD_loAddress = 0xC000; int CMD_hiAddress = 0xCFFF; @@ -51,6 +52,7 @@ void printUsage() "usage: build_segment [-a ] [-o ] [-d ]" << "\n" << " [-l ] [-h ]" << "\n" << " [-s ] [-i ]" << "\n" << + " [-r ]" << "\n" << " " << "\n\n"; } @@ -153,7 +155,7 @@ void parseCommandLine(int argc, char **argv) // Retrieve command line options - while ((opt = getopt(argc, argv, "a:o:d:s:i:l:h:")) != -1) + while ((opt = getopt(argc, argv, "a:o:d:s:i:r:l:h:")) != -1) { switch(opt) { @@ -162,6 +164,7 @@ void parseCommandLine(int argc, char **argv) case 'd': CMD_outDir = optarg; break; case 's': CMD_segName = optarg; break; case 'i': CMD_segInfo = optarg; break; + case 'r': CMD_romLayout = optarg; break; case 'l': CMD_loAddress = strtol(optarg, nullptr ,16); break; case 'h': CMD_hiAddress = strtol(optarg, nullptr ,16); break; default: printUsage(); ERROR(); @@ -278,6 +281,7 @@ void calcRoutineSizes() outFile << "\n" << ".segment " << CMD_segName << " [start=$100, min=$100, max=$FFFF]" << "\n"; outFile << "#define SEGMENT_" << CMD_segName << "\n"; + outFile << "#define ROM_LAYOUT_" << CMD_romLayout << "\n"; for (const auto &sourceFile : GLOBAL_sourceFiles) { @@ -481,6 +485,7 @@ void compileSegment() ", outBin=\"" << CMD_outFile << "\", fill]" << "\n"; outFile << "#define SEGMENT_" << CMD_segName << "\n"; + outFile << "#define ROM_LAYOUT_" << CMD_romLayout << "\n"; outFile << ".namespace " << CMD_segName << " {" << "\n\n"; // Write files which only contain definitions (no routines) @@ -694,7 +699,8 @@ void BinningProblem::addToProblem(SourceFile *routine) if (!gapFound) { - ERROR(std::string("start address of fixed address file '") + routine->fileName + "' already occupied"); + ERROR(std::string("start address of fixed address file '") + \ + routine->fileName + "' already occupied or out of range"); } } } From d71dcebf3a7e09992f64cf962973cb659d191db5 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 10 Jan 2020 22:21:41 +0100 Subject: [PATCH 51/77] compilation fix --- Makefile | 6 +++--- c64/kernal/iostack/load_save_common.s | 4 +++- c64/kernal/jumptable/4000.internal_jumptable.s | 9 +++++++++ 3 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 c64/kernal/jumptable/4000.internal_jumptable.s diff --git a/Makefile b/Makefile index c5a6c117..a6b3bbc0 100644 --- a/Makefile +++ b/Makefile @@ -265,11 +265,11 @@ build/symbols_hybrid.vs: build/target_generic/KERNAL_combined.vs # Rules - platform 'Mega 65' specific -build/mega65.rom: build/kernal_0_mega65.rom build/target_mega65/OUTK_1.BIN build/basic_mega65.rom build/chargen.rom - cat build/target_mega65/OUTK_1.BIN > build/mega65.rom +build/mega65.rom: build/kernal_mega65.rom_0 build/kernal_mega65.rom_1 build/basic_mega65.rom_0 build/chargen.rom + cat build/kernal_mega65.rom_1 > build/mega65.rom dd if=/dev/zero bs=4096 count=6 of=build/padding1 cat build/padding1 >> build/mega65.rom - cat build/basic_mega65.rom build/chargen.rom build/chargen.rom build/kernal_0_mega65.rom >> build/mega65.rom + cat build/basic_mega65.rom_0 build/chargen.rom build/chargen.rom build/kernal_mega65.rom_0 >> build/mega65.rom dd if=/dev/zero bs=4096 count=16 of=build/padding2 cat build/padding2 >> build/mega65.rom rm -f build/padding* diff --git a/c64/kernal/iostack/load_save_common.s b/c64/kernal/iostack/load_save_common.s index 95fc9ff2..e5562158 100644 --- a/c64/kernal/iostack/load_save_common.s +++ b/c64/kernal/iostack/load_save_common.s @@ -104,6 +104,7 @@ lvs_advance_MEMUSS: #endif + lvs_check_EAL: lda MEMUSS+1 @@ -224,7 +225,6 @@ lvs_display_saving: !: rts - lvs_error_end: sec @@ -243,6 +243,8 @@ lvs_success_end: clc rts +#endif // XXX is this endif in propeer place? + lvs_device_not_found_error: jsr kernalstatus_DEVICE_NOT_FOUND diff --git a/c64/kernal/jumptable/4000.internal_jumptable.s b/c64/kernal/jumptable/4000.internal_jumptable.s new file mode 100644 index 00000000..ad6e41d8 --- /dev/null +++ b/c64/kernal/jumptable/4000.internal_jumptable.s @@ -0,0 +1,9 @@ +#if (ROM_LAYOUT_M65 && SEGMENT_KERNAL_1) + +// XXX this is for testing only + + sed + sed + rts + +#endif // ROM layout From d11d28925d17c8aa9cad391c25fbde4140290209 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sat, 11 Jan 2020 10:18:28 +0100 Subject: [PATCH 52/77] fix for PLOT routine --- .../jumptable/4000.internal_jumptable.s | 2 ++ c64/kernal/screen/chrout_screen.s | 3 +-- c64/kernal/screen/e50a.plot.s | 2 +- .../screen/e56c.screen_calculate_pointers.s | 19 +++++++++++++++++++ ...pnt_user.s => screen_calculate_pnt_user.s} | 5 +---- 5 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 c64/kernal/screen/e56c.screen_calculate_pointers.s rename c64/kernal/screen/{e56c.screen_calculate_pnt_user.s => screen_calculate_pnt_user.s} (79%) diff --git a/c64/kernal/jumptable/4000.internal_jumptable.s b/c64/kernal/jumptable/4000.internal_jumptable.s index ad6e41d8..7ac1ee32 100644 --- a/c64/kernal/jumptable/4000.internal_jumptable.s +++ b/c64/kernal/jumptable/4000.internal_jumptable.s @@ -1,9 +1,11 @@ #if (ROM_LAYOUT_M65 && SEGMENT_KERNAL_1) + // XXX this is for testing only sed sed rts + #endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen.s b/c64/kernal/screen/chrout_screen.s index d8dadce8..7886c080 100644 --- a/c64/kernal/screen/chrout_screen.s +++ b/c64/kernal/screen/chrout_screen.s @@ -120,8 +120,7 @@ chrout_screen_literal: chrout_screen_calc_lptr_done: - jsr screen_calculate_PNT_USER - jsr screen_calculate_PNTR_LNMX + jsr screen_calculate_pointers // FALLTROUGH diff --git a/c64/kernal/screen/e50a.plot.s b/c64/kernal/screen/e50a.plot.s index d23ea917..b3d9439b 100644 --- a/c64/kernal/screen/e50a.plot.s +++ b/c64/kernal/screen/e50a.plot.s @@ -24,7 +24,7 @@ plot_set: sty PNTR stx TBLX - jsr screen_calculate_PNT_USER + jsr screen_calculate_pointers // FALLTROUGH to save one byte on RTS diff --git a/c64/kernal/screen/e56c.screen_calculate_pointers.s b/c64/kernal/screen/e56c.screen_calculate_pointers.s new file mode 100644 index 00000000..b82cdb47 --- /dev/null +++ b/c64/kernal/screen/e56c.screen_calculate_pointers.s @@ -0,0 +1,19 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + +// +// Set pointer (PNT) to current screen line , described in: +// +// - [CM64] Computes Mapping the Commodore 64 - page 216 +// - http://sta.c64.org/cbm64scrfunc.html +// + +// XXX find out what the original ROM really recalculate + + +screen_calculate_pointers: + + jsr screen_calculate_PNT_USER + jmp screen_calculate_PNTR_LNMX + + +#endif // ROM layout diff --git a/c64/kernal/screen/e56c.screen_calculate_pnt_user.s b/c64/kernal/screen/screen_calculate_pnt_user.s similarity index 79% rename from c64/kernal/screen/e56c.screen_calculate_pnt_user.s rename to c64/kernal/screen/screen_calculate_pnt_user.s index 9a3ed016..0e454f13 100644 --- a/c64/kernal/screen/e56c.screen_calculate_pnt_user.s +++ b/c64/kernal/screen/screen_calculate_pnt_user.s @@ -1,10 +1,7 @@ #if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) // -// Set pointer (PNT) to current screen line , described in: -// -// - [CM64] Computes Mapping the Commodore 64 - page 216 -// - http://sta.c64.org/cbm64scrfunc.html +// Set pointers PNT and USER to current screen line // From 734ec07afb3c1976b814dc9491b024e341e001ab Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sat, 11 Jan 2020 10:24:50 +0100 Subject: [PATCH 53/77] added stub for 'Lemmings' game --- STATUS.md | 1 + c64/kernal/,stubs/f3f6.interop | 1 + c64/kernal/,stubs/f3f6.unknown.s | 8 ++++++++ 3 files changed, 10 insertions(+) create mode 100644 c64/kernal/,stubs/f3f6.interop create mode 100644 c64/kernal/,stubs/f3f6.unknown.s diff --git a/STATUS.md b/STATUS.md index 4d1b992a..efc98db2 100644 --- a/STATUS.md +++ b/STATUS.md @@ -251,6 +251,7 @@ Not all of them - only these we want to have implemented. | `$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 | | diff --git a/c64/kernal/,stubs/f3f6.interop b/c64/kernal/,stubs/f3f6.interop new file mode 100644 index 00000000..fc5d3109 --- /dev/null +++ b/c64/kernal/,stubs/f3f6.interop @@ -0,0 +1 @@ +Routine is called by Lemmings game, purpose unknown so far diff --git a/c64/kernal/,stubs/f3f6.unknown.s b/c64/kernal/,stubs/f3f6.unknown.s new file mode 100644 index 00000000..b9a279ba --- /dev/null +++ b/c64/kernal/,stubs/f3f6.unknown.s @@ -0,0 +1,8 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + +// XXX provide documentation and implementation + + STUB_IMPLEMENTATION() + + +#endif // ROM layout From 49693f1543dc50b11b0f583e88e8751ed84f483f Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sat, 11 Jan 2020 19:22:33 +0100 Subject: [PATCH 54/77] more work towards Mega65 banking support --- Makefile | 1 + c64/aliases/,aliases_config.s | 9 ++- c64/aliases/,aliases_cpu.s | 67 +++++++++++++++---- c64/basic/basic_main_loop.s | 4 +- c64/basic/wedge_tape.s | 4 +- .../4000.mega65_kernal_1.s} | 8 ++- c64/kernal/iec/chkin_iec.s | 6 +- c64/kernal/iec/chrout_iec.s | 2 +- c64/kernal/iec/ckout_iec.s | 6 +- c64/kernal/iec/clrchn_iec.s | 2 +- c64/kernal/iec/iec_rx_byte.s | 2 +- c64/kernal/iec/load_iec.s | 8 +-- c64/kernal/iec/save_iec.s | 2 +- c64/kernal/iostack/f157.chrin.s | 8 +-- c64/kernal/iostack/f1ca.chrout.s | 6 +- c64/kernal/iostack/f20e.chkin.s | 8 +-- c64/kernal/iostack/f250.ckout.s | 8 +-- c64/kernal/iostack/f291.close.s | 4 +- c64/kernal/iostack/f34a.open.s | 4 +- c64/kernal/iostack/f4a5.load.s | 6 +- c64/kernal/iostack/f5ed.save.s | 2 +- c64/kernal/iostack/getin_real.s | 4 +- c64/kernal/screen/chrout_screen_crsr.s | 2 +- c64/kernal/screen/chrout_screen_ins.s | 2 +- c64/kernal/tape/load_tape_normal.s | 6 +- c64/kernal/tape/load_tape_turbo.s | 2 +- 26 files changed, 118 insertions(+), 65 deletions(-) rename c64/kernal/{jumptable/4000.internal_jumptable.s => banking/4000.mega65_kernal_1.s} (56%) diff --git a/Makefile b/Makefile index a6b3bbc0..84be09a2 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,7 @@ SRCDIR_KERNAL = $(SRCDIR_COMMON) \ c64/kernal \ c64/kernal/,stubs \ c64/kernal/assets \ + c64/kernal/banking \ c64/kernal/iec \ c64/kernal/iec_fast \ c64/kernal/init \ diff --git a/c64/aliases/,aliases_config.s b/c64/aliases/,aliases_config.s index cfb0a39c..083bb394 100644 --- a/c64/aliases/,aliases_config.s +++ b/c64/aliases/,aliases_config.s @@ -100,8 +100,15 @@ -// Check that memory model configuration is correct +// Check that memory model and ROM layout configurations is correct { +#if ROM_LAYOUT_M65 && !CONFIG_CPU_M65_45GS02 + .error "Mega65 ROM layout requires CONFIG_CPU_M65_45GS02" +#endif +#if ROM_LAYOUT_M65 && !CONFIG_MB_MEGA_65 + .error "Mega65 ROM layout requires CONFIG_MB_MEGA_65" +#endif + .var selected = 0; #if CONFIG_MEMORY_MODEL_38K diff --git a/c64/aliases/,aliases_cpu.s b/c64/aliases/,aliases_cpu.s index 49a4a3e4..de385d39 100644 --- a/c64/aliases/,aliases_cpu.s +++ b/c64/aliases/,aliases_cpu.s @@ -1,3 +1,4 @@ + // // Provide pseudocommands (and other goodies) to make CPU optimizations easier // @@ -12,6 +13,10 @@ #define HAS_OPCODES_65CE02 #endif +#if CONFIG_CPU_M65_45GS02 + #define HAS_OPCODES_45GS02 +#endif + #if CONFIG_CPU_WDC_65816 #define HAS_OPCODES_65816 #endif @@ -36,22 +41,60 @@ } + // // Trick to skip a 2-byte instruction // - .pseudocommand skip_2_bytes_trash_nvz { .byte $2C } + +// +// Some additional 45GS02 instructions +// + +#if HAS_OPCODES_45GS02 + +.function byteLO(value) +{ + .return mod(value.getValue(), $100) +} + +.function byteHI(value) +{ + .return (value.getValue() - byteLO(value)) / $100 +} + +.pseudocommand rts_32 // XXX not tested yet +{ + .byte $F8, $F8, $60 +} + +.pseudocommand jmp_32 bank:address // XXX not tested yet +{ + .byte $F8, $F8, $4C, byteLO(address), byteHI(address), byteLO(bank), byteHI(bank) +} + +.pseudocommand jsr_32 bank:address // XXX not tested yet +{ + .var al = address.getValue(); + .var ah = bank.getValue(); + + .byte $F8, $F8, $20, byteLO(address), byteHI(address), byteLO(bank), byteHI(bank) +} + +#endif + + + // // Some additional 65CE02 instructions // - #if HAS_OPCODES_65CE02 .pseudocommand dew addr @@ -71,11 +114,11 @@ #endif + // // Stack manipulation - some CPUs will leave .A unchanged, some will use it as temporary storage, so consider .A trashed // - .pseudocommand phx_trash_a { #if HAS_OPCODES_65C02 @@ -117,12 +160,12 @@ } + // // Branches with far offsets, substitutes by Bxx + JMP for CPUs not supporting the instruction // - -.pseudocommand bcs_far dst +.pseudocommand bcs_16 dst { #if HAS_OPCODES_65CE02 .var offset = mod($10000 + dst.getValue() - *, $10000) @@ -134,7 +177,7 @@ __l: #endif } -.pseudocommand bcc_far dst +.pseudocommand bcc_16 dst { #if HAS_OPCODES_65CE02 .var offset = mod($10000 + dst.getValue() - *, $10000) @@ -146,7 +189,7 @@ __l: #endif } -.pseudocommand beq_far dst +.pseudocommand beq_16 dst { #if HAS_OPCODES_65CE02 && XXX_DISABLED // XXX causes problems with XEMU, investigate why .var offset = mod($10000 + dst.getValue() - *, $10000) @@ -158,7 +201,7 @@ __l: #endif } -.pseudocommand bne_far dst +.pseudocommand bne_16 dst { #if HAS_OPCODES_65CE02 && XXX_DISABLED // XXX causes problems with XEMU, investigate why .var offset = mod($10000 + dst.getValue() - *, $10000) @@ -170,7 +213,7 @@ __l: #endif } -.pseudocommand bmi_far dst +.pseudocommand bmi_16 dst { #if HAS_OPCODES_65CE02 .var offset = mod($10000 + dst.getValue() - *, $10000) @@ -182,7 +225,7 @@ __l: #endif } -.pseudocommand bpl_far dst +.pseudocommand bpl_16 dst { #if HAS_OPCODES_65CE02 .var offset = mod($10000 + dst.getValue() - *, $10000) @@ -194,7 +237,7 @@ __l: #endif } -.pseudocommand bvc_far dst +.pseudocommand bvc_16 dst { #if HAS_OPCODES_65CE02 .var offset = mod($10000 + dst.getValue() - *, $10000) @@ -206,7 +249,7 @@ __l: #endif } -.pseudocommand bvs_far dst +.pseudocommand bvs_16 dst { #if HAS_OPCODES_65CE02 .var offset = mod($10000 + dst.getValue() - *, $10000) diff --git a/c64/basic/basic_main_loop.s b/c64/basic/basic_main_loop.s index 238a9c07..af6fa6d3 100644 --- a/c64/basic/basic_main_loop.s +++ b/c64/basic/basic_main_loop.s @@ -76,11 +76,11 @@ rsl_l1: #if CONFIG_DOS_WEDGE cmp #$40 // '@' - beq_far wedge_dos + beq_16 wedge_dos #endif #if CONFIG_TAPE_WEDGE cmp #$1F // left arrow - beq_far wedge_tape + beq_16 wedge_tape #endif #endif diff --git a/c64/basic/wedge_tape.s b/c64/basic/wedge_tape.s index df781320..1503f3c4 100644 --- a/c64/basic/wedge_tape.s +++ b/c64/basic/wedge_tape.s @@ -12,11 +12,11 @@ wedge_tape: sta CURLIN+1 // in case of error do not print line number cpx #$02 - bne_far do_SYNTAX_error + bne_16 do_SYNTAX_error lda BUF+1 cmp #$4C // 'L' - bne_far do_SYNTAX_error + bne_16 do_SYNTAX_error // Execute 'arrow + L' diff --git a/c64/kernal/jumptable/4000.internal_jumptable.s b/c64/kernal/banking/4000.mega65_kernal_1.s similarity index 56% rename from c64/kernal/jumptable/4000.internal_jumptable.s rename to c64/kernal/banking/4000.mega65_kernal_1.s index 7ac1ee32..4887c883 100644 --- a/c64/kernal/jumptable/4000.internal_jumptable.s +++ b/c64/kernal/banking/4000.mega65_kernal_1.s @@ -1,11 +1,13 @@ #if (ROM_LAYOUT_M65 && SEGMENT_KERNAL_1) +// +// Definitions for communication with Mega65 segment KERNAL_1 +// + // XXX this is for testing only - sed - sed - rts + rts_32 #endif // ROM layout diff --git a/c64/kernal/iec/chkin_iec.s b/c64/kernal/iec/chkin_iec.s index 80742876..f2f094dc 100644 --- a/c64/kernal/iec/chkin_iec.s +++ b/c64/kernal/iec/chkin_iec.s @@ -14,18 +14,18 @@ chkin_iec: lda LAT, Y cmp #$01 - beq_far chkin_file_not_input + beq_16 chkin_file_not_input // Send TALK + TKSA first lda FAT,Y jsr TALK - bcs_far chkinout_device_not_present + bcs_16 chkinout_device_not_present lda LAT, Y ora #$60 jsr TKSA - bcs_far chkinout_device_not_present + bcs_16 chkinout_device_not_present jmp chkin_set_device diff --git a/c64/kernal/iec/chrout_iec.s b/c64/kernal/iec/chrout_iec.s index 59263d27..c40b1804 100644 --- a/c64/kernal/iec/chrout_iec.s +++ b/c64/kernal/iec/chrout_iec.s @@ -9,7 +9,7 @@ chrout_iec: lda SCHAR jsr JCIOUT - bcc_far chrout_done_success + bcc_16 chrout_done_success jmp chrout_done_fail diff --git a/c64/kernal/iec/ckout_iec.s b/c64/kernal/iec/ckout_iec.s index 7f2e882e..389ee058 100644 --- a/c64/kernal/iec/ckout_iec.s +++ b/c64/kernal/iec/ckout_iec.s @@ -13,18 +13,18 @@ ckout_iec: // Fail if the file is open for reading (secondary address 0) lda LAT, Y - beq_far ckout_file_not_output + beq_16 ckout_file_not_output // Send LISTEN + SECOND first lda FAT,Y jsr LISTEN - bcs_far chkinout_device_not_present + bcs_16 chkinout_device_not_present lda LAT, Y ora #$60 jsr SECOND - bcs_far chkinout_device_not_present + bcs_16 chkinout_device_not_present jmp ckout_set_device diff --git a/c64/kernal/iec/clrchn_iec.s b/c64/kernal/iec/clrchn_iec.s index ea4e5a6d..85801050 100644 --- a/c64/kernal/iec/clrchn_iec.s +++ b/c64/kernal/iec/clrchn_iec.s @@ -23,7 +23,7 @@ clrchn_iec: jsr iec_check_devnum_oc // If it was IEC device - send UNLSN first - bcc_far UNLSN + bcc_16 UNLSN rts diff --git a/c64/kernal/iec/iec_rx_byte.s b/c64/kernal/iec/iec_rx_byte.s index 06fb768e..eb4fc393 100644 --- a/c64/kernal/iec/iec_rx_byte.s +++ b/c64/kernal/iec/iec_rx_byte.s @@ -16,7 +16,7 @@ iec_rx_dispatch: lda IECPROTO cmp #$01 - beq_far jiffydos_rx_byte + beq_16 jiffydos_rx_byte // FALLTROUGH diff --git a/c64/kernal/iec/load_iec.s b/c64/kernal/iec/load_iec.s index 82976a67..321072cf 100644 --- a/c64/kernal/iec/load_iec.s +++ b/c64/kernal/iec/load_iec.s @@ -30,7 +30,7 @@ load_iec: // Check file name lda FNLEN - beq_far kernalerror_FILE_NAME_MISSING + beq_16 kernalerror_FILE_NAME_MISSING // Display SEARCHING FOR + filename jsr lvs_display_searching_for @@ -106,12 +106,12 @@ load_iec: #if CONFIG_IEC_JIFFYDOS cmp #$01 - beq_far jiffydos_load // branch if JiffyDOS + beq_16 jiffydos_load // branch if JiffyDOS #endif #if CONFIG_IEC_DOLPHINDOS cmp #$02 - beq_far dolphindos_load // branch if DolphinDOS + beq_16 dolphindos_load // branch if DolphinDOS #endif #endif @@ -149,7 +149,7 @@ load_iec_loop: phx_trash_a jsr udtim_keyboard jsr STOP - bcs_far load_break_error + bcs_16 load_break_error plx_trash_a !: // Check for EOI - if so, this was the last byte diff --git a/c64/kernal/iec/save_iec.s b/c64/kernal/iec/save_iec.s index 73feeee3..59e3bfa2 100644 --- a/c64/kernal/iec/save_iec.s +++ b/c64/kernal/iec/save_iec.s @@ -16,7 +16,7 @@ save_iec: // Check file name lda FNLEN - beq_far kernalerror_FILE_NAME_MISSING + beq_16 kernalerror_FILE_NAME_MISSING // Display SAVING jsr lvs_display_saving diff --git a/c64/kernal/iostack/f157.chrin.s b/c64/kernal/iostack/f157.chrin.s index 27216162..f9d43402 100644 --- a/c64/kernal/iostack/f157.chrin.s +++ b/c64/kernal/iostack/f157.chrin.s @@ -20,17 +20,17 @@ CHRIN: lda DFLTN // Try $00 - keyboard - beq_far chrin_keyboard + beq_16 chrin_keyboard // XXX Try $03 - screen // cmp #$03 - // beq_far chrin_screen + // beq_16 chrin_screen #if HAS_RS232 // Try $02 - RS-232 cmp #$02 - beq_far chrin_rs232 + beq_16 chrin_rs232 #endif // HAS_RS232 @@ -40,7 +40,7 @@ chrin_getin: // jump entry for GETIN // Try IEC devices jsr iec_check_devnum_oc - bcc_far chrin_iec + bcc_16 chrin_iec #endif // CONFIG_IEC diff --git a/c64/kernal/iostack/f1ca.chrout.s b/c64/kernal/iostack/f1ca.chrout.s index 810b535e..e52f0e84 100644 --- a/c64/kernal/iostack/f1ca.chrout.s +++ b/c64/kernal/iostack/f1ca.chrout.s @@ -28,16 +28,16 @@ CHROUT: lda DFLTO cmp #$03 // screen - beq_far chrout_screen + beq_16 chrout_screen #if HAS_RS232 cmp #$02 - beq_far chrout_rs232 + beq_16 chrout_rs232 #endif #if CONFIG_IEC jsr iec_check_devnum_oc - bcc_far chrout_iec + bcc_16 chrout_iec #endif // FALLTROUGH diff --git a/c64/kernal/iostack/f20e.chkin.s b/c64/kernal/iostack/f20e.chkin.s index da373edc..965bb970 100644 --- a/c64/kernal/iostack/f20e.chkin.s +++ b/c64/kernal/iostack/f20e.chkin.s @@ -23,7 +23,7 @@ CHKIN: txa jsr find_fls - bcs_far chkinout_file_not_open + bcs_16 chkinout_file_not_open // Now we have table index in Y @@ -38,19 +38,19 @@ CHKIN: #if HAS_RS232 cmp #$02 - beq_far chkin_rs232 + beq_16 chkin_rs232 #endif // HAS_RS232 #if CONFIG_IEC jsr iec_check_devnum_oc - bcc_far chkin_iec + bcc_16 chkin_iec #endif // CONFIG_IEC cmp #$03 // screen - only legal one left - bne_far chkinout_device_not_present + bne_16 chkinout_device_not_present chkin_set_device: lda FAT,Y diff --git a/c64/kernal/iostack/f250.ckout.s b/c64/kernal/iostack/f250.ckout.s index f51c8bbe..32fe73b1 100644 --- a/c64/kernal/iostack/f250.ckout.s +++ b/c64/kernal/iostack/f250.ckout.s @@ -23,7 +23,7 @@ CKOUT: txa jsr find_fls - bcs_far chkinout_file_not_open + bcs_16 chkinout_file_not_open // Now we have table index in Y @@ -38,19 +38,19 @@ CKOUT: #if HAS_RS232 cmp #$02 - beq_far ckout_rs232 + beq_16 ckout_rs232 #endif // HAS_RS232 #if CONFIG_IEC jsr iec_check_devnum_oc - bcc_far ckout_iec + bcc_16 ckout_iec #endif // CONFIG_IEC cmp #$03 // screen - only legal one left - bne_far chkinout_device_not_present + bne_16 chkinout_device_not_present ckout_set_device: lda FAT,Y diff --git a/c64/kernal/iostack/f291.close.s b/c64/kernal/iostack/f291.close.s index 0a4803c7..7a31ea5a 100644 --- a/c64/kernal/iostack/f291.close.s +++ b/c64/kernal/iostack/f291.close.s @@ -25,12 +25,12 @@ CLOSE: #if HAS_RS232 cmp #$02 - beq_far close_rs232 + beq_16 close_rs232 #endif #if CONFIG_IEC jsr iec_check_devnum_oc - bcc_far close_iec + bcc_16 close_iec #endif // FALLTROUGH diff --git a/c64/kernal/iostack/f34a.open.s b/c64/kernal/iostack/f34a.open.s index d9a843e8..67c373c1 100644 --- a/c64/kernal/iostack/f34a.open.s +++ b/c64/kernal/iostack/f34a.open.s @@ -60,14 +60,14 @@ open_has_space: #if HAS_RS232 cmp #$02 - beq_far open_rs232 + beq_16 open_rs232 #endif #if CONFIG_IEC jsr iec_check_devnum_oc - bcc_far open_iec + bcc_16 open_iec #endif diff --git a/c64/kernal/iostack/f4a5.load.s b/c64/kernal/iostack/f4a5.load.s index c2233541..66850933 100644 --- a/c64/kernal/iostack/f4a5.load.s +++ b/c64/kernal/iostack/f4a5.load.s @@ -43,17 +43,17 @@ LOAD: #if CONFIG_TAPE_NORMAL cmp #$01 - beq_far load_tape_normal + beq_16 load_tape_normal #endif #if CONFIG_TAPE_TURBO cmp #$07 - beq_far load_tape_turbo + beq_16 load_tape_turbo #endif #if CONFIG_IEC jsr iec_check_devnum_lvs - bcc_far load_iec + bcc_16 load_iec #endif jmp lvs_illegal_device_number diff --git a/c64/kernal/iostack/f5ed.save.s b/c64/kernal/iostack/f5ed.save.s index bd3eb912..57ef482c 100644 --- a/c64/kernal/iostack/f5ed.save.s +++ b/c64/kernal/iostack/f5ed.save.s @@ -25,7 +25,7 @@ SAVE: #if CONFIG_IEC jsr iec_check_devnum_lvs - bcc_far save_iec + bcc_16 save_iec #endif jmp lvs_illegal_device_number diff --git a/c64/kernal/iostack/getin_real.s b/c64/kernal/iostack/getin_real.s index fd2d60c0..01f29026 100644 --- a/c64/kernal/iostack/getin_real.s +++ b/c64/kernal/iostack/getin_real.s @@ -16,13 +16,13 @@ getin_real: lda DFLTN // Try $00 - keyboard - beq_far getin_keyboard + beq_16 getin_keyboard #if HAS_RS232 // Try $02 - RS-232 cmp #$02 - beq_far getin_rs232 + beq_16 getin_rs232 #endif // HAS_RS232 diff --git a/c64/kernal/screen/chrout_screen_crsr.s b/c64/kernal/screen/chrout_screen_crsr.s index 13f22bd0..9a076b44 100644 --- a/c64/kernal/screen/chrout_screen_crsr.s +++ b/c64/kernal/screen/chrout_screen_crsr.s @@ -33,7 +33,7 @@ chrout_screen_CRSR_RIGHT: jsr screen_get_clipped_PNTR cpy #39 - beq_far screen_advance_to_next_line + beq_16 screen_advance_to_next_line iny !: diff --git a/c64/kernal/screen/chrout_screen_ins.s b/c64/kernal/screen/chrout_screen_ins.s index dd1e60b6..f191564c 100644 --- a/c64/kernal/screen/chrout_screen_ins.s +++ b/c64/kernal/screen/chrout_screen_ins.s @@ -14,7 +14,7 @@ chrout_screen_INS: // Not space, we cannot insert anything - bne_far chrout_screen_done + bne_16 chrout_screen_done chrout_screen_ins_possible: diff --git a/c64/kernal/tape/load_tape_normal.s b/c64/kernal/tape/load_tape_normal.s index 1b77bf5f..ec06918a 100644 --- a/c64/kernal/tape/load_tape_normal.s +++ b/c64/kernal/tape/load_tape_normal.s @@ -92,7 +92,7 @@ load_tape_normal_header: lda (TAPE1),y cmp #$05 - beq_far tape_load_error // end of tape mark, nothing to load + beq_16 tape_load_error // end of tape mark, nothing to load cmp #$01 beq !+ @@ -125,10 +125,10 @@ load_tape_normal_payload: jsr tape_normal_pilot_data ldy #$00 // no data size limit jsr tape_normal_get_data - bcs_far tape_load_error + bcs_16 tape_load_error jsr lvs_check_EAL - bne_far tape_load_error // amount of data read does not match header info + bne_16 tape_load_error // amount of data read does not match header info jmp tape_load_success diff --git a/c64/kernal/tape/load_tape_turbo.s b/c64/kernal/tape/load_tape_turbo.s index 2ce2a528..e85999e9 100644 --- a/c64/kernal/tape/load_tape_turbo.s +++ b/c64/kernal/tape/load_tape_turbo.s @@ -132,7 +132,7 @@ load_tape_turbo_loop: // Verify the checksum cpx PRTY - beq_far tape_load_success + beq_16 tape_load_success jmp tape_load_error From 33b8e2537e0216d4210a2618b54e507b898e2697 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 12 Jan 2020 10:47:02 +0100 Subject: [PATCH 55/77] more work on C65/Mega65 extended memory support --- CONFIG.md | 10 +++- Makefile | 4 +- c64/aliases/,aliases_cpu.s | 68 ++++++++++------------- c64/kernal/banking/4000.mega65_kernal_1.s | 2 +- 4 files changed, 40 insertions(+), 44 deletions(-) diff --git a/CONFIG.md b/CONFIG.md index c1f56871..95ef6ffb 100644 --- a/CONFIG.md +++ b/CONFIG.md @@ -74,9 +74,17 @@ Choose if your CPU supports the Commodore Semiconductor Group 65CE02 instruction It enables some speed/size code optimizations. +### `CONFIG_CPU_CSG_4510` + +Choose if your CPU supports the Commodore Semiconductor Group 4510 instruction set, like: + +* CSG 4510 - microcontroller used in the Commodore 65 prototypes + +It enables some speed/size code optimizations and allows C65 memory mapping to work. + ### `CONFIG_CPU_M65_45GS02` -Choose if you have a Mega65 FPGA board. +Choose if you have a Mega65 FPGA board. It enables some speed/size code optimizations and allows Mega65 memory mapping to work. ### `CONFIG_CPU_WDC_65816` diff --git a/Makefile b/Makefile index 84be09a2..a33aa1b2 100644 --- a/Makefile +++ b/Makefile @@ -224,7 +224,7 @@ build/target_mega65/OUTK_0.BIN build/target_mega65/KERNAL_0_combined.vs build/ta build/kernal_mega65.rom_1 build/target_mega65/OUTK_1.BIN build/target_mega65/KERNAL_1_combined.vs build/target_mega65/KERNAL_1_combined.sym: @mkdir -p build/target_mega65 @rm -f $@* build/kernal_mega65.rom_1 build/target_mega65/KERNAL_1* - @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s KERNAL_1 -i KERNAL_1-mega65 -o OUTK_1.BIN -d build/target_mega65 -l 4000 -h 7fff c64/,,config_mega65.s $(SRCDIR_KERNAL) $(GEN_KERNAL) + @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s KERNAL_1 -i KERNAL_1-mega65 -o OUTK_1.BIN -d build/target_mega65 -l 4000 -h 5fff c64/,,config_mega65.s $(SRCDIR_KERNAL) $(GEN_KERNAL) @cp build/target_mega65/OUTK_1.BIN build/kernal_mega65.rom_1 .PRECIOUS: build/target_%/newrom @@ -268,7 +268,7 @@ build/symbols_hybrid.vs: build/target_generic/KERNAL_combined.vs build/mega65.rom: build/kernal_mega65.rom_0 build/kernal_mega65.rom_1 build/basic_mega65.rom_0 build/chargen.rom cat build/kernal_mega65.rom_1 > build/mega65.rom - dd if=/dev/zero bs=4096 count=6 of=build/padding1 + dd if=/dev/zero bs=4096 count=8 of=build/padding1 cat build/padding1 >> build/mega65.rom cat build/basic_mega65.rom_0 build/chargen.rom build/chargen.rom build/kernal_mega65.rom_0 >> build/mega65.rom dd if=/dev/zero bs=4096 count=16 of=build/padding2 diff --git a/c64/aliases/,aliases_cpu.s b/c64/aliases/,aliases_cpu.s index de385d39..392e15cf 100644 --- a/c64/aliases/,aliases_cpu.s +++ b/c64/aliases/,aliases_cpu.s @@ -3,16 +3,20 @@ // Provide pseudocommands (and other goodies) to make CPU optimizations easier // - -#if CONFIG_CPU_WDC_65C02 || CONFIG_CPU_CSG_65CE02 || CONFIG_CPU_WDC_65816 +#if CONFIG_CPU_WDC_65C02 || CONFIG_CPU_CSG_65CE02 || CONFIG_CPU_CSG_4510 || CONFIG_CPU_M65_45GS02 || CONFIG_CPU_WDC_65816 .cpu _65c02 #define HAS_OPCODES_65C02 + #define HAS_BCD_SAFE_INTERRUPTS #endif -#if CONFIG_CPU_CSG_65CE02 || CONFIG_CPU_M65_45GS02 +#if CONFIG_CPU_CSG_65CE02 || CONFIG_CPU_CSG_4510 || CONFIG_CPU_M65_45GS02 #define HAS_OPCODES_65CE02 #endif +#if CONFIG_CPU_CSG_4510 || CONFIG_CPU_M65_45GS02 + #define HAS_OPCODES_4510 +#endif + #if CONFIG_CPU_M65_45GS02 #define HAS_OPCODES_45GS02 #endif @@ -22,10 +26,6 @@ #endif -#if CONFIG_CPU_WDC_65C02 || CONFIG_CPU_CSG_65CE02 || CONFIG_CPU_M65_45GS02 || CONFIG_CPU_WDC_65816 - #define HAS_BCD_SAFE_INTERRUPTS -#endif - // // These are not exactly for optimization - but to encourage proper usage of panic screen @@ -46,46 +46,18 @@ // Trick to skip a 2-byte instruction // -.pseudocommand skip_2_bytes_trash_nvz -{ - .byte $2C -} +.pseudocommand skip_2_bytes_trash_nvz { .byte $2C } // -// Some additional 45GS02 instructions +// Memory mapping for C65 and Mega65 // -#if HAS_OPCODES_45GS02 +#if HAS_OPCODES_4510 -.function byteLO(value) -{ - .return mod(value.getValue(), $100) -} - -.function byteHI(value) -{ - .return (value.getValue() - byteLO(value)) / $100 -} - -.pseudocommand rts_32 // XXX not tested yet -{ - .byte $F8, $F8, $60 -} - -.pseudocommand jmp_32 bank:address // XXX not tested yet -{ - .byte $F8, $F8, $4C, byteLO(address), byteHI(address), byteLO(bank), byteHI(bank) -} - -.pseudocommand jsr_32 bank:address // XXX not tested yet -{ - .var al = address.getValue(); - .var ah = bank.getValue(); - - .byte $F8, $F8, $20, byteLO(address), byteHI(address), byteLO(bank), byteHI(bank) -} +.pseudocommand map { .byte $5C } +.pseudocommand eom { .byte $EA } #endif @@ -97,6 +69,22 @@ #if HAS_OPCODES_65CE02 +// .B register support + +.pseudocommand tab { .byte $5B } +.pseudocommand tba { .byte $7B } + +// .Z register support + +.pseudocommand inz { .byte $1B } +.pseudocommand dez { .byte $3B } +.pseudocommand phz { .byte $DB } +.pseudocommand plz { .byte $FB } +.pseudocommand taz { .byte $4B } +.pseudocommand tza { .byte $6B } + +// 16-bit data processing + .pseudocommand dew addr { .var arg = addr.getValue() diff --git a/c64/kernal/banking/4000.mega65_kernal_1.s b/c64/kernal/banking/4000.mega65_kernal_1.s index 4887c883..ffaaf370 100644 --- a/c64/kernal/banking/4000.mega65_kernal_1.s +++ b/c64/kernal/banking/4000.mega65_kernal_1.s @@ -7,7 +7,7 @@ // XXX this is for testing only - rts_32 + rts #endif // ROM layout From bb60a10f51a8abfef289fdaf0158688a8eae3947 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 12 Jan 2020 12:13:17 +0100 Subject: [PATCH 56/77] fixed DEL key on the first column of the second part of logical line --- bin/basic_generic.rom | Bin 8192 -> 8192 bytes bin/basic_testing.rom | Bin 8192 -> 8192 bytes bin/basic_ultimate64.rom | Bin 8192 -> 8192 bytes bin/kernal_generic.rom | Bin 8192 -> 8192 bytes bin/kernal_testing.rom | Bin 8192 -> 8192 bytes bin/kernal_ultimate64.rom | Bin 8192 -> 8192 bytes bin/mega65.rom | Bin 131072 -> 131072 bytes c64/kernal/screen/chrout_screen_del.s | 126 ++++++++++++++++---------- 8 files changed, 79 insertions(+), 47 deletions(-) diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom index 71f93854919b8e39d39150ee44d05d14e57c8980..efcb419647c8211ec23da6168b5a732b101a9ded 100644 GIT binary patch delta 114 zcmZp0XmFU|!8muKryAqjjRkxxjB_{Fv%F!HocnsEy~3sc8LJc+9w>-EU!(}4=e|~$ zJGq5z0?UloK1(-CuyZp4m8)<}WM-T@c^mgLAUT&u7f7Dwu>z88yrw{D8(t+LMx)8` L^7TNW`|^qa-gYVK delta 114 zcmZp0XmFU|!MJatryAqFjRkxxjQcj%v%F!H-1mB=y~3sc8LJc+9w>-EU!(}4_q|rw zH@Ssv0?W?VK07x{uyZp4m8)<}WMz88yrw{D8(t+LMuW-m L^7TNW`|^qaNTn;v diff --git a/bin/basic_testing.rom b/bin/basic_testing.rom index fe82066217bec18b21ad75719ef5d0083cccdfdc..55fd256fd0e34ce3e96b01fc311d2403005a3073 100644 GIT binary patch delta 122 zcmZp0XmFU2z_?~&qArl=w*nHUOc~c~V)SEX+4#mMX>t&Y4&$25^(<$Z7?)4>WshK7 zGkF=iA!q9Qr5hAd-z%({{D9q&Z_S&P_6nE&XRK0KvqoY0WPJ`vpdL?-G-e>Rfm@%E Xarx#4JbHpa9>1JFBcsvec=?3@dD|{p delta 122 zcmZp0XmFU2z<6$AqArl=w*nHUOc~E@V)SEXx%|ebYH|>Z4&%Aa^(<$Z7*9_2WshJy zH+dPmA!pzFr5hCb-YcA&{D9q&@7$Y}_6nE&XRK0Kvqs_MWPJ`vpdL?-G-e>Rfm@%E X@#N+QJbHpa9>1JFBcs9Oc=?3@8%r?2 diff --git a/bin/basic_ultimate64.rom b/bin/basic_ultimate64.rom index 6a954ce5ae3595f84f8890fe67bd13c91bd434f2..a8c2391bbc90cd4295fe6bf78c2703ed8a7c6a38 100644 GIT binary patch delta 164 zcmZp0XmFU|p;7l{rM<$X{~4CQiEkMaCM&YrOg3O=n;gr245(3s!c63XfQcmz8)xaUtSRap!GoQ diff --git a/bin/kernal_generic.rom b/bin/kernal_generic.rom index cf7e19a03c0a44d704a31503800ef6febd7f86bb..1f7492031f6e9efb087f4218a9231f3f6e4d8aba 100644 GIT binary patch delta 3421 zcmZ8k4R8}>8s2Q$rfF%rEg)$r@F|6+6>1e^GIApo8W$*3*}~b^mv@?&v+>7Zy|?j zq`A|8R+Gyat90*7q9-MzU@Ob(aIH)Vvhlz!)J`7O7&MNMg&IM<{!5~Z+g&XoJYXU8f@fz2!0od<49mr7)dlGV?J0X@> zH5Yyjh}st2`Z5MK~#4OEsk2L=CAtEXb?tsx~K-p z?H0pUs_QE`vrHwX*;QN*+D^XL&MjXSg;hkU*6iW-phx1!7#Bk@(*bvl?t!R0k-*O+ zz@t8yq-9m8_K{^-B@3kp1lFU1<&_gXFVPSm@b#T&zc!})`1;+fd{sU!9Y1#Tq@mJI zaVJ>*AGm34sxpfeZt5^I(ptl!G5n|0*UW=yvyRbt-6+wif&g|oDqQ+eI zff&}Y23BZAr-Dv3ni>~&Cnek(WKA8WcHv8-&}kGLM&S@V*=S^i6Jow_TFil)PjaWx zz8I)}lI?(#jZjnei^=jq_euyZP_)dfL6G9E^teSjs<_*`GL0)F?Yqxib<4q6T-%*ad!yR(BWmIFmLIf&@?U&gOS!n%3`)z zj0yXhY&#{VqxJxpwEuQua6c;A%2|q{>HZ-FdbX17c?;KVndB32w4Bilh*3RUp0uo6 zo(*0|8X@!mxFjXO7u*nmOTQDo<6PD%)O@q)I=tBD5+_)D+7f#mK0&VKJ%XZ<7Okee z->q+=t)=x!;9yG5Ft?P&QeoW2yg1t&v7`;VVhKz7Fl!qEFJ{6fA~6d|b^6j;^nmgv zWR;x4F$Qo9-z%kls6k>qOjCx3m1zU3W3eGf34J2Sj(2D!rFKf-NF7TFts=nMwNxt1 z_W__<3wb>&>`#_s-J}xP8UzuAz_tg_Yav*nMUA6EHDbiyj`JEjWrXFVgQiSdjMl=W zm}M5D5JwX}G7gZBHWOF=TvKBt^^7a1SE6WOlOK38`4!GVSZ`O-^LNbH8D~iqtsrMbK&aEwHXk!|ehUZVIo9*jn6KVBM=R;c)9l zTIg+ki57ZVx6=LfEzoC_g2kOszMn2aCt||6jxrXGdPf^Q7s;(ct*$%bscOnKj8%D1 zlg3l!RO?^SYmc>$ghKV$r08$H!Ti(l@2GjOp9m6ibZ7B}E^E z!2cv5^vVB)9P#9ct5AOo@&uhA4aG>clC%|M>f{_4^NjRVKXh7AE#?XLbLyjMd@vl$Lx?7c}Y)MTzr(lxYoIP)D zfn<{B7d4d>_KG99Q@>A=PS>>%%1q=yKinhR66S2G;uW; zl%!xV3jYGK9GeUaLo(er1SKg9dG4TVszBYPV9QpizuwDSRNSl5={ELC&hpzpdk=h_ zbA&eNmdDl{WH0q(Y~Ip|TbpHRa*t+es`MAyH&3f-h?v%Qt?x`T3(W^rOKS>1&YF}cchV*ixz7}!`34x6eZ0?rM15SApyBb z4Fm&d2k7!lLZKT2@jG;|<2D@(+Eof2^eJ@kBBUWO#0&NpQjjA8j0#6Mn+~CA;b`iM z3~}H($8P^fks2A!wFZ-i?Y}8UYeUcrlao3&GYOw*dR%;2pY+<=$r?b?jWThwvpC$Uw4JFyqk7CZL%yR}nD3Gjsn=1C#!J=JE{%l9f8%Eo-~J z1>(_O2?S`%98@6jWiTiOEa!SOa+Yui3Q_39FdS8+BZ{<_@$i+f4L8O? zcJX&ZiM~0jaDI}xDEy@%CJ-Qo^Tbhmv4O2Q&nI>R8yzctVD?Bzp&KUdkco4cxK0!I zCB7z+%6a^P{W71wBX^kpa7WHCh6X>vUAJH3ZU7@L({#Abk@0zdRZ-+G^DCFW7^@Lf zWsE$Ne-M;N(Q~I?nGz=;Bi(3k0N0G6tz-OJQ0(CRr)L=As5*{n#sK5?lB@-bRd0~{ z7tE{pBEA7QJZ#(me?K6d4_jpD1wC774=ZLU1b^Q|dWz`)XS$cXw?Mb#p8@>Z7+!P> zKQe(ox{N=$iJuK(LBdnxz%uZM6L@_HTY~sV0QU!odqHu@+#uEltM%&Ya&`3*HJ-eI WUmwR=KIGnJY+-AyNrBuX7ZN2vHT&Nio#`yY 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 X!mm!@B(H6hQ!$klw!qb&7tZ_-U>~LD diff --git a/bin/kernal_testing.rom b/bin/kernal_testing.rom index 0862000177731e98510cab0e9889b5cabc5e8812..f7142493dbc54e7ea823374c970b6470adfa23fd 100644 GIT binary patch delta 2885 zcmY*b4Nx1$6+Yb|1jOJ2W037&me`Jk9SDx&go)ci9H&;@_29{0Lpn(=<0PX@aVE_) z6Q@>74L-Xi?0BQ(2Mo$JfWDnvxQlc-Rle6Rp`l`+7 zTLt$ks6A+9@UWV#@D8*&>SECn1^eanfPo(8W38D!PNAzgBY9VUZ%$0b7gftC3;v9Z z>+5tLQk7X&?~#Rat6slkeekuh0vv7TnY^N^t zD_MPK0G1)?I#NX)D?04)ybu=eGV`{A4XjRs9=IWjS9&Atc{g8isV^<>fkj?_gd@jf1sB&OR$M8 zgkFrfvPElot;C29&SJs8xke_JnfHA0PLRd(b6gebBVGPE8&*f}kGJW|w7^}VlTmFuJoaDZD| z?3i~A3psm)N%4Ii8Ep^3>Cy9AE9CguIWBjBfsf<+ zn?E^lhNEhmnmnGSCe#+`8}=a%uKNXl32!58?y92fq}TzQZHwWjVj_`rnzxRJ$i2B6 z)^1CRRwcve%;oTlF@T^=%Oq!$G%GyPdy-aYp$>ZppKE&bX2y);-$QD7Ox6tBr0JB0 z;sAs$v{AXe%bFCsIB?p;py4{JmhZzOa5IS6p)lGaLyMUx)r9P|9&VhqR=IXdFDYbM z-rbqzWT+h*$*#N=x4bU97<3~h9zm~@U*>ICy*Y~fGTJfAX@;^I(P#qoCXnws`a{Bm z8RE`cWqMr($S$hcwY`WJW@`82O zv~xFVm;$m7PoY6_Fn{BcDb)h30t^fIkw53J%)XjHnse~4$v64y?gPqX@P|=Ovl~-B$0(^--b3>pshy$0!=$#L5a9nmmEyEYS@3^Uj^KNyHH9x# zfCuKmJ~$cS4~b~{E}KM#Ne~4hr)Gnhs~1% zXCG9>k2~sVaiC)lExJ4Q(nHNQAkq}1&ny@@{^Mr%fdQ`3N_$VFk_IAOjhjVB`O@ye zE9C2f2TGV|D>VjbB(~!#aSlSP+`zZ@E|&!A@N$W~ZLpcN*lnm{cp{$X&x#kC&%v3{ zCqURf;7|P8Bs!>h(0c6yZ=p%IW^pbp^dzw(^wv7@Z&Ho-BD+=mTv`Kgk^G{vvQAn2 zd)sjDLAost7ysN@$Y10*aEg{~&Kh6?@^H~w;};Rgq!(hMSNRg+&6g|Hpz>LWIr3)F zZMrt{e$jdw245AeejGGHb}2K|Dd|H3#!<1;w^C9?!B-~%0r3LgsZ6H$MC^k1V}=tJ z>Wdf|C^(ZK~snqcRIO!!Yp3Yjxj(w7pX zV#QWtcG6dC&8wcQ^&zXlSL+ol!w80#W97RwS(fTau*elu=L`Cd$r;T0wO zjwf(;5*^q0OE5?V@dO-fUsQDL1=LriQ4}x_ z@chjp;CG8fK-j6%ih!V21dONag3Hcl(wrkf5g?xB9Y$n+EGeE#b&@DIWT%AlKwgXE z^g{-94^VT;fb*M_I*@frX5>Nv{H+4-t|Q>SOtCSKQJHpMq1Y+3j_g|bimsoWU%5#a z_+VybrB1h(ti4q&Totu+L&Ed#S@>QHf7-(L;4S3Nl3(byk)tI){Lu+T$UmHSRoH(x z_bT2ZL-<$yhZ6$|?G0$I3ixim^J#kYtcQqyVsfZ?lpWW=E?RA=aI1}?uAEht30uHt zC{^0HLYhdLhDXc;Whri)M0+QNpCAwU)9R;mJtU{}b{!_0N-I~lDvo}|2t|}tVmmdE?2aaRPtDC3qm{+xVT liprwl1{2e;foZsd!QanfA&hf^_NxNLZL6J<|Mfi^`!6cptpxx8 delta 2763 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 UzoTLPFV~OE1?a@P0W;104}r8?RR910 delta 5869 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 diff --git a/c64/kernal/screen/chrout_screen_del.s b/c64/kernal/screen/chrout_screen_del.s index 6036228b..4bb659cf 100644 --- a/c64/kernal/screen/chrout_screen_del.s +++ b/c64/kernal/screen/chrout_screen_del.s @@ -13,10 +13,89 @@ chrout_screen_DEL: jmp chrout_screen_quote !: ldy PNTR + beq chrout_screen_del_column_0 + cpy #40 bne chrout_screen_del_column_normal // FALLTROUGH +chrout_screen_del_column_40: + + // First column of the extended line - decrement USER/PNT for copying + +#if HAS_OPCODES_65CE02 + dew USER + dew PNT +#else + lda USER+0 + bne !+ + dec USER+1 + dec PNT+1 +!: + dec USER+0 + dec PNT+0 +#endif + + // Copy characters + ldx #39 + ldy #0 + + jsr chrout_screen_del_copy_loop + + // Finish by moving the cursor left + jmp chrout_screen_CRSR_LEFT + +chrout_screen_del_column_normal: + + // We need to scroll back the rest of the logical line + + // First reduce PNTR to 0-39 range + jsr screen_get_clipped_PNTR + sty PNTR + + // Now get the offset to the last logical line character + jsr screen_get_logical_line_end_ptr + tya + + // Substract the PNTR value, this will tell us how many characters we need to move + sec + sbc PNTR + tax + + // Perform the character copy (scroll back) in a loop + ldy PNTR + dey + jsr chrout_screen_del_copy_loop + + dec PNTR + + // FALLTROUGH + +chrout_screen_del_done: + + jmp chrout_screen_calc_lptr_done + +chrout_screen_del_copy_loop: + + iny + lda (USER),y + dey + sta (USER),y + iny + lda (PNT),y + dey + sta (PNT),y + iny + + dex + bpl chrout_screen_del_copy_loop + + // Clear char at end of line (just the character - not color!) + lda #$20 + sta (PNT),y + + rts + chrout_screen_del_column_0: ldy TBLX @@ -38,52 +117,5 @@ chrout_screen_del_column_0: // Finish with recalculating all the variables bne chrout_screen_del_done -chrout_screen_del_column_normal: - - // We need to scroll back the rest of the logical line - - // First reduce PNTR to 0-39 range - jsr screen_get_clipped_PNTR - sty PNTR - - // Now get the offset to the last logical line character - jsr screen_get_logical_line_end_ptr - tya - - // Substract the PNTR value, this will tell us how many characters we need to move - sec - sbc PNTR - tax - - // Perform the character copy (scroll back) in a loop - ldy PNTR - dey -!: - iny - lda (USER),y - dey - sta (USER),y - iny - lda (PNT),y - dey - sta (PNT),y - iny - - dex - bpl !- - - // Clear char at end of line (just the character - not color!) - - jsr screen_get_logical_line_end_ptr - lda #$20 - sta (PNT),y - dec PNTR - - // FALLTROUGH - -chrout_screen_del_done: - - jmp chrout_screen_calc_lptr_done - #endif // ROM layout From 3ca3725cba5a9977d0f33be27967520aaeb9846f Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 12 Jan 2020 13:12:16 +0100 Subject: [PATCH 57/77] small cleanup in BASIC, improved cartridge compatibility --- Makefile | 45 +++++++++++----------- c64/basic/{ => ,stubs}/a408.interop | 0 c64/basic/{ => ,stubs}/a408.reason.s | 0 c64/basic/{ => ,stubs}/a453.interop | 0 c64/basic/{ => ,stubs}/a453.unknown.s | 0 c64/basic/{ => ,stubs}/a483.main.s | 0 c64/basic/{ => ,stubs}/a57c.chrnch.s | 0 c64/basic/{ => ,stubs}/a57c.interop | 0 c64/basic/{ => ,stubs}/a644.interop | 0 c64/basic/{ => ,stubs}/a644.new.s | 0 c64/basic/{ => ,stubs}/a659.interop | 0 c64/basic/{ => ,stubs}/a659.setcharptr.s | 0 c64/basic/{ => ,stubs}/a71a.interop | 0 c64/basic/{ => ,stubs}/a71a.qplop.s | 0 c64/basic/{ => ,stubs}/a7e4.gone.s | 0 c64/basic/{ => ,stubs}/a7e4.interop | 0 c64/basic/{ => ,stubs}/ad9e.frmevl.s | 0 c64/basic/{ => ,stubs}/ad9e.interop | 0 c64/basic/{ => ,stubs}/ae86.eval.s | 0 c64/basic/{ => ,stubs}/ae86.interop | 0 c64/basic/{ => ,stubs}/e38b.error.s | 0 c64/basic/{ => ,stubs}/e38b.interop | 0 c64/basic/{ => ,stubs}/e3bf.init.s | 0 c64/basic/{ => ,stubs}/e3bf.interop | 0 c64/basic/{ => ,stubs}/e453.interop | 0 c64/basic/{ => ,stubs}/e453.rvect.s | 0 c64/basic/init/basic_cold_start_internal.s | 5 +++ c64/basic/init/initmsg_real.s | 4 ++ 28 files changed, 32 insertions(+), 22 deletions(-) rename c64/basic/{ => ,stubs}/a408.interop (100%) rename c64/basic/{ => ,stubs}/a408.reason.s (100%) rename c64/basic/{ => ,stubs}/a453.interop (100%) rename c64/basic/{ => ,stubs}/a453.unknown.s (100%) rename c64/basic/{ => ,stubs}/a483.main.s (100%) rename c64/basic/{ => ,stubs}/a57c.chrnch.s (100%) rename c64/basic/{ => ,stubs}/a57c.interop (100%) rename c64/basic/{ => ,stubs}/a644.interop (100%) rename c64/basic/{ => ,stubs}/a644.new.s (100%) rename c64/basic/{ => ,stubs}/a659.interop (100%) rename c64/basic/{ => ,stubs}/a659.setcharptr.s (100%) rename c64/basic/{ => ,stubs}/a71a.interop (100%) rename c64/basic/{ => ,stubs}/a71a.qplop.s (100%) rename c64/basic/{ => ,stubs}/a7e4.gone.s (100%) rename c64/basic/{ => ,stubs}/a7e4.interop (100%) rename c64/basic/{ => ,stubs}/ad9e.frmevl.s (100%) rename c64/basic/{ => ,stubs}/ad9e.interop (100%) rename c64/basic/{ => ,stubs}/ae86.eval.s (100%) rename c64/basic/{ => ,stubs}/ae86.interop (100%) rename c64/basic/{ => ,stubs}/e38b.error.s (100%) rename c64/basic/{ => ,stubs}/e38b.interop (100%) rename c64/basic/{ => ,stubs}/e3bf.init.s (100%) rename c64/basic/{ => ,stubs}/e3bf.interop (100%) rename c64/basic/{ => ,stubs}/e453.interop (100%) rename c64/basic/{ => ,stubs}/e453.rvect.s (100%) diff --git a/Makefile b/Makefile index a33aa1b2..fe065856 100644 --- a/Makefile +++ b/Makefile @@ -9,30 +9,31 @@ TESTTAPE = testsuite/testtape-c64-pal-turbo.tap SRCDIR_COMMON = c64/aliases SRCDIR_BASIC = $(SRCDIR_COMMON) \ - c64/basic \ - c64/basic/commands \ - c64/basic/init \ - c64/basic/rom_revision + c64/basic \ + c64/basic/,stubs \ + c64/basic/commands \ + c64/basic/init \ + c64/basic/rom_revision SRCDIR_KERNAL = $(SRCDIR_COMMON) \ - c64/kernal \ - c64/kernal/,stubs \ - c64/kernal/assets \ - c64/kernal/banking \ - c64/kernal/iec \ - c64/kernal/iec_fast \ - c64/kernal/init \ - c64/kernal/interrupts \ - c64/kernal/iostack \ - c64/kernal/jumptable \ - c64/kernal/keyboard \ - c64/kernal/memory \ - c64/kernal/print \ - c64/kernal/rom_revision \ - c64/kernal/rs232 \ - c64/kernal/screen \ - c64/kernal/tape \ - c64/kernal/time + c64/kernal \ + c64/kernal/,stubs \ + c64/kernal/assets \ + c64/kernal/banking \ + c64/kernal/iec \ + c64/kernal/iec_fast \ + c64/kernal/init \ + c64/kernal/interrupts \ + c64/kernal/iostack \ + c64/kernal/jumptable \ + c64/kernal/keyboard \ + c64/kernal/memory \ + c64/kernal/print \ + c64/kernal/rom_revision \ + c64/kernal/rs232 \ + c64/kernal/screen \ + c64/kernal/tape \ + c64/kernal/time SRC_TOOLS = $(wildcard src/tools/*.c,src/tools/*.cc) diff --git a/c64/basic/a408.interop b/c64/basic/,stubs/a408.interop similarity index 100% rename from c64/basic/a408.interop rename to c64/basic/,stubs/a408.interop diff --git a/c64/basic/a408.reason.s b/c64/basic/,stubs/a408.reason.s similarity index 100% rename from c64/basic/a408.reason.s rename to c64/basic/,stubs/a408.reason.s diff --git a/c64/basic/a453.interop b/c64/basic/,stubs/a453.interop similarity index 100% rename from c64/basic/a453.interop rename to c64/basic/,stubs/a453.interop diff --git a/c64/basic/a453.unknown.s b/c64/basic/,stubs/a453.unknown.s similarity index 100% rename from c64/basic/a453.unknown.s rename to c64/basic/,stubs/a453.unknown.s diff --git a/c64/basic/a483.main.s b/c64/basic/,stubs/a483.main.s similarity index 100% rename from c64/basic/a483.main.s rename to c64/basic/,stubs/a483.main.s diff --git a/c64/basic/a57c.chrnch.s b/c64/basic/,stubs/a57c.chrnch.s similarity index 100% rename from c64/basic/a57c.chrnch.s rename to c64/basic/,stubs/a57c.chrnch.s diff --git a/c64/basic/a57c.interop b/c64/basic/,stubs/a57c.interop similarity index 100% rename from c64/basic/a57c.interop rename to c64/basic/,stubs/a57c.interop diff --git a/c64/basic/a644.interop b/c64/basic/,stubs/a644.interop similarity index 100% rename from c64/basic/a644.interop rename to c64/basic/,stubs/a644.interop diff --git a/c64/basic/a644.new.s b/c64/basic/,stubs/a644.new.s similarity index 100% rename from c64/basic/a644.new.s rename to c64/basic/,stubs/a644.new.s diff --git a/c64/basic/a659.interop b/c64/basic/,stubs/a659.interop similarity index 100% rename from c64/basic/a659.interop rename to c64/basic/,stubs/a659.interop diff --git a/c64/basic/a659.setcharptr.s b/c64/basic/,stubs/a659.setcharptr.s similarity index 100% rename from c64/basic/a659.setcharptr.s rename to c64/basic/,stubs/a659.setcharptr.s diff --git a/c64/basic/a71a.interop b/c64/basic/,stubs/a71a.interop similarity index 100% rename from c64/basic/a71a.interop rename to c64/basic/,stubs/a71a.interop diff --git a/c64/basic/a71a.qplop.s b/c64/basic/,stubs/a71a.qplop.s similarity index 100% rename from c64/basic/a71a.qplop.s rename to c64/basic/,stubs/a71a.qplop.s diff --git a/c64/basic/a7e4.gone.s b/c64/basic/,stubs/a7e4.gone.s similarity index 100% rename from c64/basic/a7e4.gone.s rename to c64/basic/,stubs/a7e4.gone.s diff --git a/c64/basic/a7e4.interop b/c64/basic/,stubs/a7e4.interop similarity index 100% rename from c64/basic/a7e4.interop rename to c64/basic/,stubs/a7e4.interop diff --git a/c64/basic/ad9e.frmevl.s b/c64/basic/,stubs/ad9e.frmevl.s similarity index 100% rename from c64/basic/ad9e.frmevl.s rename to c64/basic/,stubs/ad9e.frmevl.s diff --git a/c64/basic/ad9e.interop b/c64/basic/,stubs/ad9e.interop similarity index 100% rename from c64/basic/ad9e.interop rename to c64/basic/,stubs/ad9e.interop diff --git a/c64/basic/ae86.eval.s b/c64/basic/,stubs/ae86.eval.s similarity index 100% rename from c64/basic/ae86.eval.s rename to c64/basic/,stubs/ae86.eval.s diff --git a/c64/basic/ae86.interop b/c64/basic/,stubs/ae86.interop similarity index 100% rename from c64/basic/ae86.interop rename to c64/basic/,stubs/ae86.interop diff --git a/c64/basic/e38b.error.s b/c64/basic/,stubs/e38b.error.s similarity index 100% rename from c64/basic/e38b.error.s rename to c64/basic/,stubs/e38b.error.s diff --git a/c64/basic/e38b.interop b/c64/basic/,stubs/e38b.interop similarity index 100% rename from c64/basic/e38b.interop rename to c64/basic/,stubs/e38b.interop diff --git a/c64/basic/e3bf.init.s b/c64/basic/,stubs/e3bf.init.s similarity index 100% rename from c64/basic/e3bf.init.s rename to c64/basic/,stubs/e3bf.init.s diff --git a/c64/basic/e3bf.interop b/c64/basic/,stubs/e3bf.interop similarity index 100% rename from c64/basic/e3bf.interop rename to c64/basic/,stubs/e3bf.interop diff --git a/c64/basic/e453.interop b/c64/basic/,stubs/e453.interop similarity index 100% rename from c64/basic/e453.interop rename to c64/basic/,stubs/e453.interop diff --git a/c64/basic/e453.rvect.s b/c64/basic/,stubs/e453.rvect.s similarity index 100% rename from c64/basic/e453.rvect.s rename to c64/basic/,stubs/e453.rvect.s diff --git a/c64/basic/init/basic_cold_start_internal.s b/c64/basic/init/basic_cold_start_internal.s index 139e12a6..01e4ea6a 100644 --- a/c64/basic/init/basic_cold_start_internal.s +++ b/c64/basic/init/basic_cold_start_internal.s @@ -31,6 +31,11 @@ basic_cold_start_internal: lda #>do_ILLEGAL_QUANTITY_error sta USRADD+1 + // Clear the BRK location address + lda #$00 + sta CMP0+0 + sta CMP0+1 + // Print startup messages jsr INITMSG diff --git a/c64/basic/init/initmsg_real.s b/c64/basic/init/initmsg_real.s index 7158d7d6..107ce04e 100644 --- a/c64/basic/init/initmsg_real.s +++ b/c64/basic/init/initmsg_real.s @@ -5,6 +5,10 @@ initmsg_real: + // Clear the screen first, some cartridges (like IEEE-488) leeave a mess on the screen + lda #147 + jsr JCHROUT + #if CONFIG_BANNER_SIMPLE lda # Date: Sun, 12 Jan 2020 13:19:28 +0100 Subject: [PATCH 58/77] fixed compilation for some configurations --- c64/kernal/iec/iec_rx_check_eoi.s | 6 ++++++ c64/kernal/iostack/load_save_common.s | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/c64/kernal/iec/iec_rx_check_eoi.s b/c64/kernal/iec/iec_rx_check_eoi.s index 386940e4..6b5e9403 100644 --- a/c64/kernal/iec/iec_rx_check_eoi.s +++ b/c64/kernal/iec/iec_rx_check_eoi.s @@ -4,6 +4,9 @@ // Helper routine to check for EOI while receiving byte from IEC // +#if CONFIG_IEC + + iec_rx_check_eoi: // Wait for talker to pull CLK. @@ -36,4 +39,7 @@ iec_rx_check_eoi_done: rts +#endif // CONFIG_IEC + + #endif // ROM layout diff --git a/c64/kernal/iostack/load_save_common.s b/c64/kernal/iostack/load_save_common.s index e5562158..d8350989 100644 --- a/c64/kernal/iostack/load_save_common.s +++ b/c64/kernal/iostack/load_save_common.s @@ -243,7 +243,7 @@ lvs_success_end: clc rts -#endif // XXX is this endif in propeer place? +#endif lvs_device_not_found_error: @@ -255,6 +255,8 @@ lvs_illegal_device_number: jsr kernalstatus_DEVICE_NOT_FOUND jmp kernalerror_ILLEGAL_DEVICE_NUMBER +#if CONFIG_TAPE_NORMAL || CONFIG_TAPE_TURBO || CONFIG_IEC + lvs_load_verify_error: // XXX should we really return BASIC error code here? lda VERCKK @@ -268,5 +270,7 @@ lvs_verify_error: sec rts +#endif + #endif // ROM layout From da0f5a815090593e01589fab9cf2746dcdb12f11 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 12 Jan 2020 23:38:43 +0100 Subject: [PATCH 59/77] fixed some 65CE02 instabilities --- bin/basic_generic.rom | Bin 8192 -> 8192 bytes bin/basic_testing.rom | Bin 8192 -> 8192 bytes bin/basic_ultimate64.rom | Bin 8192 -> 8192 bytes bin/kernal_generic.rom | Bin 8192 -> 8192 bytes bin/kernal_testing.rom | Bin 8192 -> 8192 bytes bin/kernal_ultimate64.rom | Bin 8192 -> 8192 bytes bin/mega65.rom | Bin 131072 -> 131072 bytes c64/,,config_mega65.s | 2 +- c64/aliases/,aliases_cpu.s | 20 +++++++++--------- .../screen/chrout_screen_jumptable_codes.s | 4 ++++ 10 files changed, 15 insertions(+), 11 deletions(-) diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom index efcb419647c8211ec23da6168b5a732b101a9ded..d974222787d9af42ba09512e7c0b1b6093bb35ab 100644 GIT binary patch delta 2197 zcmZuyeQXow8Gr1Hv4fM?fh4$m#BWF-KpZCo91M*^NXFuk>nPxrgsO1f3Nvjr5M^5l ze>g-OWM~<&Zfv1#v?KB*@keO9lty7q=}_1CB5iYFLPA1XA~1!riE}<+Su4MLE--C> z>~weU^Stl#{k-};ZFOyRg}=Nza`&a}joa$C?WvOV39XY00dL@qW1uB}7KK=Lf#VHP zW!@0k55=Hi6f~Kpi=er0K)HD-JZKglNP1bLWQ?QCcnDBf_$IruxLFJu71RGJu}z|C z2^BuqD-3H9g`GM1+V=*8LpdaNHlOixBE($oc+ADu`gqqo#~W4FBpIDa7jKkI$y#Jg z4?zaBa6BRz-C=TF^5IdrGil_@CHq6*?G}!c%6OM#<7>ITs}qJHZLfjrEhM3+v_+;$ zR)qko0B08Ulua(Hr^g$_;L}t17-0*nUh?k6Kx6;5^W)o zck&ytfSdRYQaNA2ub1q6C11r6Pf*mvTnP;)X2e{W;DUJKDSIj+H0f64&jp>*res-I zawcsUbni+w6y=0dx>})2m%*@aM}+IT)Bb@;*`{R5M42VSlTOaU0dS&mbk)6!z;u|O ziW#Hp?_Fd7$q?IVWK7XYL(=R*zOD%r4@C%F*iw@hfU z-kp&_jaFvoDbyGdHNARrl?H8nW$cY>WLNQImnwu^Y`tylPvpj06(*jT3T5$mSd#n% zLp=8cUSG86%}E-qc2uLM=MN{07y}v*2KBqOr-OpVP?ZT2vNgf5@AnBc2CLt5Pip1$ zeR{l&GD$EG5>L+PvEXD=WQZY4f|C9Z28AL0LG~a07+Gsb%b&y*FOnKOwq?6#=Xbxe zd)prNTi^cP%P%!Fw$#7kE@|Fd+O(^9%|3f}S^2t({k5(d&}b=>K^dL;Eueaxf$B0D zs`D>os4vO2doJ$wc#pXPkU$BH`Tj&c&ETzkq(-no(N@&r_Vwzn-SFNU{u!b^A z=vr7u%WQO6IknRYT1nT_str|iqobN`qE*h#TjyYg5OrcEUB(wykP5}G3z5urUlg#aYQbUHh^DXuMX7Jix zhbiY@>Y;|b2>qq-%^&M`Ps7$%3P!i?g~_`|THv!w*Gk3qV}*HSrWJlZbH3r=4e&~j zOU0l3a2ll9<~?;Y(?ItXR7&0ysc88ElKx*DOFe=1gF72Rz;F0R^3hc7ZEG{6j{l3K zHm+jLAMb2fwGn0uUY!P^6}+v})Sk|s@%ozpJTP;l368;2DEI+4^Ui?=n3*nW`zRMu z)ow8U?a@^ zn4qt-v*vlXmxgYBZNB9}?OPsOL~xY&*Y;dtDT!z}lQh zIf1V$tvgotg|!I+b?rw=VD<#OlY-O}Bm=*F3J0g2RFpvSgA$mk#7iy|7>k7W7i`gP zjRbP70ip|3t}Oj8%KTqgLM**O5m%sIplOgJ04e!#?k2H z{c3h5+HE=L;2l!+VVKv5`5lO6JLI&|h~V3}R#9rvfFdgj8*}WyCp`A<0H&&1Rf=Vk zvN+uBo-ip3G2#W!j(h|2E=@`%I{APj?StyazC9T4cE=nlW)Eaqt0Ra{Z0 znUCBV?9I_%`Tm8y_fO0 zIOEdd#!veGny_PpYq005!|rZ($cbGE^VR3p`okh6Gf|<(xKwz#aGxW{G+j;5)_`P*qel&8X{Is2Hkgx`rz1l8-e*+)qwM+m2 delta 2129 zcmb6aTTmO<^-3!tVPT}CfYlPS?%hcJ$v5Ip{}8>idUBBmJj*&?|XD#_apLYSB)HYIq+%PN^*45Ep;;`Iq1*} zW`){N1f#p@C5-rxUX*W87w6P~?O5y6RiY?XWAqEe7rR zX7pceWF#lbr|q3`*lrV8g(CmTe&*P9O>Z{Kb!z^LE^6(fS0qGK$c!(Lnej=TLCGhM z26*VcjG+t0(AWP)7?F6ZAHRxzqA9Sg{XL7+56$lpX+Ums?FmJq+74xs*2h(%Y@ii+ zt+w=LDZL#pzG=sl1x_Lqk@TyemMH{@>G(Q>zY+1N!~Q4fk*5xI)BXM@{YMTwMjt(P zfIUv`yEjt0HopD|w6VSfY`juDFMQrkj`*2>U$>tUdQuAuY>R@9^}jnM|Guo+S{{+t z$~HR&wZe4U&NeyWIARS(WsCEX^1!s-UN zEA+K!QlJAX;P{Qx6zG`+OJuq0X#8uT0!bygPNRk-S_YV+Jx0IlJ)#E$bLID zGBUCu9SZ*?sBG0k;p%{D^QMU9TYI$$@(IoRQ}XtTI_rm1GOKt##EnMPWpqJfCpDgA zy~D(kXcu9uRbVegI01T?e1ZdJ7YeQ15KC=}1yVJ!0CI_#T^I6gK|US@E@)8W#H;;= zb#*|5{!;D+c(o-i8$1`0T%(pPdCcc@n zf~E>IT?h+oD8WTx_rEipz@}(5UQAf{@igmCP;8fKvp7zxbf?Fj6xf4GNSa4-wxr?w z{htukO&3ez6p}t{R?)eF;im7DP?v}`!`7xn)WL@g8EGxY21G~Kj1N(bMxyhIh<Ru^M^Prgcf-v^`v-5!9xV zVV`Op?o@rWI}Ty<*XSd*Kmd+U7NIzd;6BfOuE)s z)reR$l!&U%FWfaz{kg(6mqK0i#=J-9qH?$e7OEu*Ode~bq^K@?w{HEXPVC4H1cbi z#R}seQCBuc%+F<0=WaH+O&34)kI|jmHfw3nk0vWWU47C#%DTqURfv{<+3--cUm4zh PriJbRT$`n(g~9m`IDg!t diff --git a/bin/basic_testing.rom b/bin/basic_testing.rom index 55fd256fd0e34ce3e96b01fc311d2403005a3073..a941ab69ecdefd1515a0fe67acf2e0954f333bba 100644 GIT binary patch delta 1983 zcmcgte@q-z9)G*TGQ-WvZhLT9+XAn(wNPNiYReV@TfN%VKDD;~sA%G1g0l2SOzsa7 zyxi7HU+=C72#!ta<(k{9^XALI4xuqh%E{5BXJt0goAmmJ)r8Q}MVb=bn!8I(L+8G; zm}qkM_hl#Z-n{qy{rP@Bdu->ioi*>yPs~5Ld(W;%b{*I%+Tx-;E|geajwA!|5&B|U z`?9n}o4@P*4^EW_rBvc%oMxBIhv_A^dxVlX3QL*w-kM#)Cv)eI%$YJ>-ZJMeNNiTO ze14l1cP8NzX9R&D#>0YBVKUY_|~1)D*YI4tnCR zXc^5GP9`ZEb;h)%Wp1Jr*>*A4`>sPqp4Pv}R2^=faIJha7*I_MUI^+ytz zUWhdrkpyivF#k}Rob9tm9U1qp(F@vAAfk*JC_u*yEm*pKqifI$Ci_O9Vn#XDnG4_M zZzM>9er(zeg)*BK{zY@z{?fgh|Eosmshi$3GV+J7o_Zk{{vP-EXmcg&RM%MO6rJH) z>`Psf0}UmFkc9SDpj{gbl%&|-blPDKdZ>88T^R;v)!Dv+G~;|{26=_4@JdIb=jTn< zAC^Q#|0+pT_OF(#kQC3BOJjFQR#2*?VTtvcZg%^&?SyT+junZC=6wB#h~*m)sLTe2 zbsJ35et^ah`-ZI!|Hx0^m%ecfo z9Tu0J>anoTTIJ(1{j(($JB&eJ(&_iwIc06?_2IGAzB9zXII!AhzwP+>Wh?B999iY- z5Bu2b!&n^|aaVXyR}FbV6{`J}BeCbrDdM{_aLvgt&Rh&S-x+Fdjud{Ln;N)Q7b>XU zYTqeH%pFc2EAAcNOkKz(xS(7~jIVhJ(S zB(c}9z(pC_p}kdBSyM9-pQ;{-qjUm+RZ+eU3VJGZ@N8nNTCG3XBU=PIMad-mu0)r>vsT4d7``{Va4+r2` zcn+S27vLbg2p#Yey!?Oom3U6HYW41vXyb=OJ3o9f9_ec1NztApyvLj4BtIge`5t~$ z9C_U3Dt;xs;ZBO48=k}=@8gg-j30*=j_OC~H-035G@%{FI70IS*Az88_V9GlL?n@c zCjB#_2j3#e+eBFpZ}(K3h_*&vqg)-Oe=^vGQLR;u-t%bIxa>r6-fQjD;JqX9({Xcv zZ!@p)?I-I}BWaiJozwc|HABHoseol~#I{>!VPl7}v4b->YWE@f^{g*T2P`_}((~@1 z#Ex6^Yu6*se`GDSoCAo64q$ANg(3`6s$Di7}Z@ATMKF zLyP-TS4YKQ;R1$*WEaP!dnCt}^|XsAIJZw5efpbh$|VUQJN}r*dkR-QbDd*2F3$+n zxqDH_wyz+WZi9IzN0%+{cG+Tk#&qQz@s)+%BfbR%6^m+kanoASz%ko1mJ48J%a&Ff zY}#?t($zxfr&?^*@=T$|MHwqIY6-ON2`C~>(zMmY;r3hD1m8AtkCLJ-6QV}7}czf#{MGS#(4Qp5$2O<>zsF7Q9O2JQNhpQ|D<+Ct*KnrPc$Bn(gy@J=Mk5c G-2MYc0&~Rx delta 2105 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 N>lv=OrR{>r`3r5wuoeIS diff --git a/bin/kernal_generic.rom b/bin/kernal_generic.rom index 1f7492031f6e9efb087f4218a9231f3f6e4d8aba..bac972c36d1b7049a23a07bb8c28370c7ac00b81 100644 GIT binary patch delta 1097 zcmcIj-EZ4e6u-5TiuGfurVdpwru%^Qf(TiKv@Ro6*_P6Y%i47tAS8tOC~V@5#}sg3 zxGgPX?#f3CbTh`k1UG4M7%*B03m~Byi7nbI5=z!&Fjff*fp|d39483z4`55@o^$X0 z{mwmKV|`a!iX(Ve(RUs&8Id_d1b6NYL_eVne=Sh=%&SZy2OWWf)?!Hid4)-( znisPBG`$$sZ?qYCGue2;l*W6_1m7q?_r9hWMJ+Qx%dy38MJ`Khl%_xD(kW|H6#O7* zE-y9nTtytJxXf#IK>XxWErpoPL9;l*m3;)i<{+7D87B3i6c!f+>{R zRs!xIpe#;i1E!}d0qkn3BwZa%IR!6K! zyo`|xQ<%mpIEhzr3OX(oezj)sRr)k$@ftR)*YO74#2n`F7T(4?Sil*ag@Jcr;yqXZ z(#YU_*jPjsIV?e4#s_ea$A>tFkMJ=*!Fha&6|CYje2xOX_<#RR|I*LSv`o%U%iGk4 z(v;}Lz#3(y_n4MYL~-4`Mc6q7PB`yvF*&z$$n(v=z#$QIZ!KfbQvcagMwM^Rn#^e7 zZ8iIuhSk)tmg|;%)VL5_k?WiMDVWVvpSBvGyDqT7#P{pd>iP+)#Z8%NW_UHF?2h*Di*_@nC^WX`E{CEw{|yR$E~@|l delta 1199 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 diff --git a/bin/mega65.rom b/bin/mega65.rom index f19d079da7ac2b3a8b89af9243c6d0c373503ee3..7724db1c30d898d9e0c41b1185c5e67b4c405854 100644 GIT binary patch delta 4757 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 delta 4858 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 diff --git a/c64/,,config_mega65.s b/c64/,,config_mega65.s index 07259720..add9c08e 100644 --- a/c64/,,config_mega65.s +++ b/c64/,,config_mega65.s @@ -122,7 +122,7 @@ // #define CONFIG_BANNER_SIMPLE // #define CONFIG_BANNER_FANCY #define CONFIG_BANNER_BRAND -#define CONFIG_SHOW_FEATURES +// #define CONFIG_SHOW_FEATURES // #define CONFIG_SHOW_PAL_NTSC diff --git a/c64/aliases/,aliases_cpu.s b/c64/aliases/,aliases_cpu.s index 392e15cf..cf99d957 100644 --- a/c64/aliases/,aliases_cpu.s +++ b/c64/aliases/,aliases_cpu.s @@ -156,7 +156,7 @@ .pseudocommand bcs_16 dst { #if HAS_OPCODES_65CE02 - .var offset = mod($10000 + dst.getValue() - *, $10000) + .var offset = mod($10000 + dst.getValue() - *, $10000) -2 .byte $B3, mod(offset, $100), floor(offset / $100) #else bcc __l @@ -168,7 +168,7 @@ __l: .pseudocommand bcc_16 dst { #if HAS_OPCODES_65CE02 - .var offset = mod($10000 + dst.getValue() - *, $10000) + .var offset = mod($10000 + dst.getValue() - *, $10000) -2 .byte $93, mod(offset, $100), floor(offset / $100) #else bcs __l @@ -179,8 +179,8 @@ __l: .pseudocommand beq_16 dst { -#if HAS_OPCODES_65CE02 && XXX_DISABLED // XXX causes problems with XEMU, investigate why - .var offset = mod($10000 + dst.getValue() - *, $10000) +#if HAS_OPCODES_65CE02 + .var offset = mod($10000 + dst.getValue() - *, $10000) -2 .byte $F3, mod(offset, $100), floor(offset / $100) #else bne __l @@ -191,8 +191,8 @@ __l: .pseudocommand bne_16 dst { -#if HAS_OPCODES_65CE02 && XXX_DISABLED // XXX causes problems with XEMU, investigate why - .var offset = mod($10000 + dst.getValue() - *, $10000) +#if HAS_OPCODES_65CE02 + .var offset = mod($10000 + dst.getValue() - *, $10000) -2 .byte $D3, mod(offset, $100), floor(offset / $100) #else beq __l @@ -204,7 +204,7 @@ __l: .pseudocommand bmi_16 dst { #if HAS_OPCODES_65CE02 - .var offset = mod($10000 + dst.getValue() - *, $10000) + .var offset = mod($10000 + dst.getValue() - *, $10000) -2 .byte $33, mod(offset, $100), floor(offset / $100) #else bpl __l @@ -216,7 +216,7 @@ __l: .pseudocommand bpl_16 dst { #if HAS_OPCODES_65CE02 - .var offset = mod($10000 + dst.getValue() - *, $10000) + .var offset = mod($10000 + dst.getValue() - *, $10000) -2 .byte $13, mod(offset, $100), floor(offset / $100) #else bmi __l @@ -228,7 +228,7 @@ __l: .pseudocommand bvc_16 dst { #if HAS_OPCODES_65CE02 - .var offset = mod($10000 + dst.getValue() - *, $10000) + .var offset = mod($10000 + dst.getValue() - *, $10000) -2 .byte $53, mod(offset, $100), floor(offset / $100) #else bvs __l @@ -240,7 +240,7 @@ __l: .pseudocommand bvs_16 dst { #if HAS_OPCODES_65CE02 - .var offset = mod($10000 + dst.getValue() - *, $10000) + .var offset = mod($10000 + dst.getValue() - *, $10000) -2 .byte $73, mod(offset, $100), floor(offset / $100) #else bvc __l diff --git a/c64/kernal/screen/chrout_screen_jumptable_codes.s b/c64/kernal/screen/chrout_screen_jumptable_codes.s index 57252b9f..4281f0fc 100644 --- a/c64/kernal/screen/chrout_screen_jumptable_codes.s +++ b/c64/kernal/screen/chrout_screen_jumptable_codes.s @@ -91,6 +91,8 @@ chrout_screen_jumptable_hi: #else +.if (mod(*, $2) == 1) { nop } // align code so that vector never crosses page boundary + chrout_screen_jumptable: .word chrout_screen_CLR @@ -116,6 +118,8 @@ chrout_screen_jumptable: .word chrout_screen_DEL .word chrout_screen_RETURN +.if (mod(*, $2) == 0) { nop } // make sure routine size is always the same, needed by build system + #endif From 01f6494e321f66430ffa3edb58a160adddd290c5 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Mon, 13 Jan 2020 18:04:43 +0100 Subject: [PATCH 60/77] CHROUT now reenables IRQ --- c64/kernal/iostack/f1ca.chrout.s | 1 + 1 file changed, 1 insertion(+) diff --git a/c64/kernal/iostack/f1ca.chrout.s b/c64/kernal/iostack/f1ca.chrout.s index e52f0e84..c76d7498 100644 --- a/c64/kernal/iostack/f1ca.chrout.s +++ b/c64/kernal/iostack/f1ca.chrout.s @@ -67,6 +67,7 @@ chrout_done_unknown_device: chrout_done_success: plp + cli // XXX certainly needed for screen, what about other devices? // Restore X and Y ply_trash_a From 723a7772fa6b52e652006fcd30f0b09eab105b2e Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Mon, 13 Jan 2020 18:31:13 +0100 Subject: [PATCH 61/77] fixed IOINIT, adapted tape routines to fixed CHROUT --- STATUS.md | 4 ++-- c64/kernal/init/fda3.ioinit.s | 9 +++++---- c64/kernal/tape/tape_common.s | 7 ------- c64/kernal/tape/tape_common_screen.s | 9 +++++++++ 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/STATUS.md b/STATUS.md index efc98db2..a4cfd1c7 100644 --- a/STATUS.md +++ b/STATUS.md @@ -179,7 +179,7 @@ NOTE: Even the 'DONE' routines won't support features described as missing in on | :-------: | :--------: | :---------- | :------: | :--------------------------------------------------: | | `($028F)` | | `KEYLOG` | DONE | | | `$FF81` | `$FF5B` | `CINT` | DONE | | -| `$FF84` | `$FDA3` | `IOINIT` | PARTIAL | CIA initialization incomplete | +| `$FF84` | `$FDA3` | `IOINIT` | DONE | | | `$FF87` | `$FD50` | `RAMTAS` | DONE | | | `$FF8A` | `$FD15` | `RESTOR` | DONE | | | `$FF8D` | `$FD1A` | `VECTOR` | DONE | | @@ -220,7 +220,7 @@ NOTE: Even the 'DONE' routines won't support features described as missing in on | `$FFF0` | `$E50A` | `PLOT` | DONE | | | `$FFF3` | | `IOBASE` | DONE | | | `($FFFA)` | | NMI vec | PARTIAL | | -| `($FFFC)` | `$FCE2` | RESET vec | PARTIAL | see IOINIT status | +| `($FFFC)` | `$FCE2` | RESET vec | DONE | | | `($FFFE)` | | IRQ/BRK vec | DONE | |
diff --git a/c64/kernal/init/fda3.ioinit.s b/c64/kernal/init/fda3.ioinit.s index 0c08a714..758b2dab 100644 --- a/c64/kernal/init/fda3.ioinit.s +++ b/c64/kernal/init/fda3.ioinit.s @@ -111,10 +111,11 @@ IOINIT: lda #$3F sta CIA2_DDRA // $DD02 - // XXX how to initialize these timers??? - // stx CIA1_CRB // $DC0F - // stx CIA2_CRA // $DD0E - // stx CIA2_CRB // $DD0F + // Checked using VICE that original ROM initializes timers this way + ldx #$08 + stx CIA1_CRB // $DC0F + stx CIA2_CRA // $DD0E + stx CIA2_CRB // $DD0F // Set VIC-II bank - at least the 'Operacja Proboszcz' game needs this within IOINIT // Checked on original ROMs, that it sets bit #2 (RS-232 output) high diff --git a/c64/kernal/tape/tape_common.s b/c64/kernal/tape/tape_common.s index 90651acd..4f99c6e8 100644 --- a/c64/kernal/tape/tape_common.s +++ b/c64/kernal/tape/tape_common.s @@ -27,8 +27,6 @@ tape_break_error: tape_ask_play: - sei // timing is critical for tape loading - #if !CONFIG_TAPE_NO_KEY_SENSE // First check whether the button is already pressed @@ -50,7 +48,6 @@ tape_ask_play: tape_wait_play_loop: - jsr udtim_keyboard jsr STOP bcs tape_break_error @@ -299,15 +296,11 @@ tape_load_success: jsr tape_screen_on_motor_off jsr lvs_display_done - - cli jmp lvs_return_last_address tape_load_error: jsr tape_screen_on_motor_off - - cli jmp lvs_load_verify_error diff --git a/c64/kernal/tape/tape_common_screen.s b/c64/kernal/tape/tape_common_screen.s index 737888f3..61f25877 100644 --- a/c64/kernal/tape/tape_common_screen.s +++ b/c64/kernal/tape/tape_common_screen.s @@ -19,6 +19,15 @@ tape_screen_on_motor_off: jmp screen_on tape_screen_off_motor_on: + + // We do not want interrupts and CHROUT reenables them + sei + + // Clear keyboard buffer + lda #$00 + sta NDX + + // Set screen color lda VIC_EXTCOL sta COLSTORE From 9061a8d0fcab480fee0be35d5c6e2ad6dd82a1f5 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Tue, 14 Jan 2020 16:22:30 +0100 Subject: [PATCH 62/77] turbo tape can now adjust itself for tape motor speed --- CONFIG.md | 8 ++- STATUS.md | 4 +- c64/,,config_custom.s | 1 + c64/,,config_generic.s | 1 + c64/,,config_mega65.s | 1 + c64/,,config_testing.s | 1 + c64/,,config_ultimate64.s | 1 + c64/aliases/,aliases_config.s | 21 +++++--- c64/aliases/,aliases_ram_lowmem.s | 2 +- c64/kernal/iostack/f1ca.chrout.s | 2 +- c64/kernal/tape/load_tape_normal.s | 18 +------ c64/kernal/tape/load_tape_turbo.s | 16 ++---- c64/kernal/tape/tape_common_prepare_cia.s | 30 +++++++++++ c64/kernal/tape/tape_normal_get_pulse.s | 2 +- c64/kernal/tape/tape_turbo_get_bit.s | 44 +++++++++------- c64/kernal/tape/tape_turbo_get_byte.s | 6 ++- c64/kernal/tape/tape_turbo_sync.s | 64 ++++++++++++++++++++++- c64/kernal/tape/tape_turbo_sync_measure.s | 46 ++++++++++++++++ 18 files changed, 206 insertions(+), 62 deletions(-) create mode 100644 c64/kernal/tape/tape_common_prepare_cia.s create mode 100644 c64/kernal/tape/tape_turbo_sync_measure.s diff --git a/CONFIG.md b/CONFIG.md index 95ef6ffb..800e646d 100644 --- a/CONFIG.md +++ b/CONFIG.md @@ -151,10 +151,16 @@ Needs about 700 bytes in KERNAL segment (if both normal and turbo are enabled, a ### `CONFIG_TAPE_TURBO` -Adds a minimal turbo tape support - just LOAD command (device 7, like on _Action Replay_ and _Final_ cartridges) +Adds a minimal turbo tape support - just LOAD command (device 7, like on _Action Replay_ and _Final_ cartridges), up to 250 blocks Needs about 650 bytes in KERNAL segment (if both normal and turbo are enabled, about 950 bytes are needed, as they share some code). If unsure - enable. +### `CONFIG_TAPE_TURBO_AUTOCALIBRATE` + +Extends the tape turbo load functionality by ability to adjust to tape speed differences. + +Needs about 100 bytes in KERNAL segment. If unsure - enable for Datasette or other tape recorder, disable for digital solutions like Tapuino. + ### `CONFIG_TAPE_NO_KEY_SENSE` Enable this option if you are using a tape interface adapter with some audio signal source connected. These adapters lack key sense functionality, so the computer is unable to tell whether Play got pressed or not - with this option ROM will assume Play got pressed after imppulses start arriving from the tape. diff --git a/STATUS.md b/STATUS.md index a4cfd1c7..acbe51e6 100644 --- a/STATUS.md +++ b/STATUS.md @@ -11,7 +11,7 @@ Here are the features of the Open ROMs not found in the original ROMs from the 8 * JiffyDOS and DolphinDOS protocols support * DOS wedge (direct mode only) - `@`, `@`, `@$`, `@$`, `@` -* turbo tape load support (as device 7, or using `←L`), up to 250 blocks (can store bytes under I/O) +* turbo tape load support (as device 7, or using `←L`), quite sophisticated: up to 250 blocks (can store bytes under I/O), can use sync signal for autocalibration (less load errors than simple turbos) * improved support for tape adapters (for using regular casette players and other audio devices instead of Datasette) * extended `LOAD` command @@ -70,7 +70,7 @@ The following ROM features are currently missing: | Driver | Status | Remarks | | :----------------: | :------: | :------------------------------------------------: | | normal | PARTIAL | no tape speed calibratrion, no error correction | -| turbo (250 blocks) | PARTIAL | no tape speed calibratrion | +| turbo (250 blocks) | DONE | | ## IEC bus diff --git a/c64/,,config_custom.s b/c64/,,config_custom.s index 95bfda75..40fa8d18 100644 --- a/c64/,,config_custom.s +++ b/c64/,,config_custom.s @@ -56,6 +56,7 @@ #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO +#define CONFIG_TAPE_TURBO_AUTOCALIBRATE // #define CONFIG_TAPE_NO_KEY_SENSE // #define CONFIG_TAPE_NO_MOTOR_CONTROL diff --git a/c64/,,config_generic.s b/c64/,,config_generic.s index 4195ef46..e091a2af 100644 --- a/c64/,,config_generic.s +++ b/c64/,,config_generic.s @@ -50,6 +50,7 @@ #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO +#define CONFIG_TAPE_TURBO_AUTOCALIBRATE // #define CONFIG_TAPE_NO_KEY_SENSE // #define CONFIG_TAPE_NO_MOTOR_CONTROL diff --git a/c64/,,config_mega65.s b/c64/,,config_mega65.s index add9c08e..ea322e26 100644 --- a/c64/,,config_mega65.s +++ b/c64/,,config_mega65.s @@ -50,6 +50,7 @@ // #define CONFIG_TAPE_NORMAL // #define CONFIG_TAPE_TURBO +// #define CONFIG_TAPE_TURBO_AUTOCALIBRATE // #define CONFIG_TAPE_NO_KEY_SENSE // #define CONFIG_TAPE_NO_MOTOR_CONTROL diff --git a/c64/,,config_testing.s b/c64/,,config_testing.s index 0f7a164f..59e2dbaa 100644 --- a/c64/,,config_testing.s +++ b/c64/,,config_testing.s @@ -50,6 +50,7 @@ // #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO +// #define CONFIG_TAPE_TURBO_AUTOCALIBRATE // #define CONFIG_TAPE_NO_KEY_SENSE // #define CONFIG_TAPE_NO_MOTOR_CONTROL diff --git a/c64/,,config_ultimate64.s b/c64/,,config_ultimate64.s index f2927c60..24045b8a 100644 --- a/c64/,,config_ultimate64.s +++ b/c64/,,config_ultimate64.s @@ -50,6 +50,7 @@ #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO +#define CONFIG_TAPE_TURBO_AUTOCALIBRATE // #define CONFIG_TAPE_NO_KEY_SENSE // #define CONFIG_TAPE_NO_MOTOR_CONTROL diff --git a/c64/aliases/,aliases_config.s b/c64/aliases/,aliases_config.s index 083bb394..6d97e40c 100644 --- a/c64/aliases/,aliases_config.s +++ b/c64/aliases/,aliases_config.s @@ -102,12 +102,12 @@ // Check that memory model and ROM layout configurations is correct { -#if ROM_LAYOUT_M65 && !CONFIG_CPU_M65_45GS02 - .error "Mega65 ROM layout requires CONFIG_CPU_M65_45GS02" -#endif -#if ROM_LAYOUT_M65 && !CONFIG_MB_MEGA_65 - .error "Mega65 ROM layout requires CONFIG_MB_MEGA_65" -#endif +//#if ROM_LAYOUT_M65 && !CONFIG_CPU_M65_45GS02 +// .error "Mega65 ROM layout requires CONFIG_CPU_M65_45GS02" +//#endif +//#if ROM_LAYOUT_M65 && !CONFIG_MB_MEGA_65 +// .error "Mega65 ROM layout requires CONFIG_MB_MEGA_65" +//#endif .var selected = 0; @@ -166,6 +166,15 @@ +// Check that tape configuration is correct +{ +#if !CONFIG_TAPE_TURBO && CONFIG_TAPE_TURBO_AUTOCALIBRATE + .error "CONFIG_TAPE_TURBO_AUTOCALIBRATE requires CONFIG_TAPE_TURBO*" +#endif +} + + + // Check that RS-232 configuration is correct { #if CONFIG_RS232_UP9600 && (CONFIG_TAPE_NORMAL || CONFIG_TAPE_TURBO) diff --git a/c64/aliases/,aliases_ram_lowmem.s b/c64/aliases/,aliases_ram_lowmem.s index 1f0c37a7..50f63017 100644 --- a/c64/aliases/,aliases_ram_lowmem.s +++ b/c64/aliases/,aliases_ram_lowmem.s @@ -214,7 +214,7 @@ .label RIDBS = $29C // -- WIP -- read pointer into RS-232 receive buffer .label RODBS = $29D // -- WIP -- read pointer into RS-232 send buffer .label RODBE = $29E // -- WIP -- write pointer into RS-232 send buffer - .label IRQTMP = $29F // $29F-$2A0 -- NOT IMPLEMENTED -- + .label IRQTMP = $29F // $29F-$2A0 temporary IRQ vector storage [!] we use it for tape speed calibration instead .label ENABL = $2A1 // -- NOT IMPLEMENTED -- .label TODSNS = $2A2 // -- NOT IMPLEMENTED -- .label TRDTMP = $2A3 // -- NOT IMPLEMENTED -- diff --git a/c64/kernal/iostack/f1ca.chrout.s b/c64/kernal/iostack/f1ca.chrout.s index c76d7498..ebc31152 100644 --- a/c64/kernal/iostack/f1ca.chrout.s +++ b/c64/kernal/iostack/f1ca.chrout.s @@ -67,7 +67,7 @@ chrout_done_unknown_device: chrout_done_success: plp - cli // XXX certainly needed for screen, what about other devices? + cli // needed for screen (checked calling the routine on original ROMs), XXX what about other devices? // Restore X and Y ply_trash_a diff --git a/c64/kernal/tape/load_tape_normal.s b/c64/kernal/tape/load_tape_normal.s index ec06918a..1d4f18b4 100644 --- a/c64/kernal/tape/load_tape_normal.s +++ b/c64/kernal/tape/load_tape_normal.s @@ -32,6 +32,7 @@ // XXX use pilot to calibrate reading speed +// XXX add error correction #if CONFIG_TAPE_NORMAL @@ -41,22 +42,6 @@ load_tape_normal: jsr tape_ditch_verify // only LOAD is supported, no VERIFY - // Setup CIA #2 timers - - ldx #$03 // set timer A to 4 ticks - stx CIA2_TIMALO // $DD04 - ldx #$00 - stx CIA2_TIMAHI // $DD05 - - stx CIA2_TIMBHI // $DD07 - dex // puts $FF - for running timer B as long as possible - stx CIA2_TIMBLO // $DD06 - - // Let timer A run continuously - - ldx #%00010001 // start timer, force latch reload - stx CIA2_CRA // $DD0E - // Temporarily store MEMUSS in EAL lda MEMUSS+1 @@ -66,6 +51,7 @@ load_tape_normal: // Start playing + jsr tape_common_prepare_cia jsr tape_ask_play // FALLTROUGH diff --git a/c64/kernal/tape/load_tape_turbo.s b/c64/kernal/tape/load_tape_turbo.s index e85999e9..44af58c9 100644 --- a/c64/kernal/tape/load_tape_turbo.s +++ b/c64/kernal/tape/load_tape_turbo.s @@ -4,13 +4,9 @@ // Tape (turbo) part of the LOAD routine // -// Based on routine by enthusi/Onslaught, found here: +// Initially based on routine by enthusi/Onslaught, found here: // - https://codebase64.pokefinder.org/doku.php?id=base:turbotape_loader_source - - -// XXX use calibration bits to improve reading -// XXX find out how to use B0 tape timing -// XXX put header type into (TAPE1) +// but heavily reworked since then. Still, original authors deserve credits! #if CONFIG_TAPE_TURBO @@ -20,15 +16,11 @@ load_tape_turbo: jsr tape_ditch_verify // only LOAD is supported, no VERIFY - lda #$00 - sta CIA2_TIMAHI // $DD05 - lda #$FE // timer threshold for TurboTape - sta CIA2_TIMALO // $DD04 - // Prepare for sound effects jsr tape_clean_sid // Start playing + jsr tape_common_prepare_cia jsr tape_ask_play // FALLTROUGH @@ -76,7 +68,7 @@ load_tape_turbo_header_loop: // Handle the header jsr tape_clean_sid - jsr tape_handle_header // XXX handle non-relocatable programs - any non-0 even header type + jsr tape_handle_header bcs load_tape_turbo_header // if name does not match, look for other header // FALLTROUGH diff --git a/c64/kernal/tape/tape_common_prepare_cia.s b/c64/kernal/tape/tape_common_prepare_cia.s new file mode 100644 index 00000000..ac141cee --- /dev/null +++ b/c64/kernal/tape/tape_common_prepare_cia.s @@ -0,0 +1,30 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + + +#if CONFIG_TAPE_NORMAL || CONFIG_TAPE_TURBO + + +tape_common_prepare_cia: + + // Setup CIA #2 timers + + ldx #$03 // set timer A to 4 ticks XXX consider setting to 8 + stx CIA2_TIMALO // $DD04 + ldx #$00 + stx CIA2_TIMAHI // $DD05 + + stx CIA2_TIMBHI // $DD07 + dex // puts $FF - for running timer B as long as possible + stx CIA2_TIMBLO // $DD06 + + // Let timer A run continuously + + ldx #%00010001 // start timer, force latch reload + stx CIA2_CRA // $DD0E + + rts + +#endif + + +#endif // ROM layout diff --git a/c64/kernal/tape/tape_normal_get_pulse.s b/c64/kernal/tape/tape_normal_get_pulse.s index 82a41858..95d9e939 100644 --- a/c64/kernal/tape/tape_normal_get_pulse.s +++ b/c64/kernal/tape/tape_normal_get_pulse.s @@ -18,7 +18,7 @@ tape_normal_get_pulse: // implementation is probably just shorter lda #$10 -!: +!: bit CIA1_ICR // $DC0D beq !- // busy loop to detect signal, restart timer afterwards lda CIA2_TIMBLO // $DD06 diff --git a/c64/kernal/tape/tape_turbo_get_bit.s b/c64/kernal/tape/tape_turbo_get_bit.s index 2f616008..31c5a82f 100644 --- a/c64/kernal/tape/tape_turbo_get_bit.s +++ b/c64/kernal/tape/tape_turbo_get_bit.s @@ -13,26 +13,34 @@ tape_turbo_get_bit: - lda #$10 + lda #$10 !: - bit CIA1_ICR // $DC0D - beq !- // busy loop to detect signal - lda CIA2_ICR // $DD0D - pha - lda #%00011001 // start timer, one-shot, force latch reload - sta CIA2_CRA // $DD0E - pla - - pha // audio/video effects - asl - sta SID_SIGVOL - beq !+ - lda #$06 -!: - sta VIC_EXTCOL - pla + bit CIA1_ICR // $DC0D + beq !- // busy loop to detect signal, restart timer afterwards + lda CIA2_TIMBLO // $DD06 + ldx #%01010001 // start timer, force latch reload, count timer A underflows + stx CIA2_CRB // $DD0F - lsr +#if CONFIG_TAPE_TURBO_AUTOCALIBRATE + tax + cmp IRQTMP+0 +#else + cmp #$BF // threshold calculated by autocalibration routines under VICE +#endif + + bcs !+ + + lda #$01 + sta SID_SIGVOL + lda #$06 + sta VIC_EXTCOL + sec + rts +!: + lda #$00 + sta SID_SIGVOL + sta VIC_EXTCOL + clc rts diff --git a/c64/kernal/tape/tape_turbo_get_byte.s b/c64/kernal/tape/tape_turbo_get_byte.s index ec8683aa..9c2c22a6 100644 --- a/c64/kernal/tape/tape_turbo_get_byte.s +++ b/c64/kernal/tape/tape_turbo_get_byte.s @@ -15,14 +15,16 @@ tape_turbo_get_byte: + phx_trash_a lda #$01 sta INBIT // init the to-be-read byte with 1 (canary bit to mark loop end) !: jsr tape_turbo_get_bit rol INBIT bcc !- // is the initial 1 shifted into carry already? - lda INBIT // much nicer than ldx #8: dex: loop - + plx_trash_a + lda INBIT + rts diff --git a/c64/kernal/tape/tape_turbo_sync.s b/c64/kernal/tape/tape_turbo_sync.s index a81c272c..d442789f 100644 --- a/c64/kernal/tape/tape_turbo_sync.s +++ b/c64/kernal/tape/tape_turbo_sync.s @@ -22,18 +22,78 @@ tape_turbo_sync_common: tape_turbo_sync_header: - ldx #$FF -!: +#if CONFIG_TAPE_TURBO_AUTOCALIBRATE + + // Initial pulse threshold + lda #$BF // auto-calibration under VICE often returns this value + sta IRQTMP+0 + + // Zero temporary stack area + lda #$00 ldy #$03 +!: + sta STACK, y + dey + bpl !- + +#endif // CONFIG_TAPE_TURBO_AUTOCALIBRATE + + // Perform synchronization + ldx #$C0 +!: + phx_trash_a + ldy #$04 !: jsr tape_turbo_sync_common dey bne !- + plx_trash_a dex bne !-- // FALLTROUGH +#if CONFIG_TAPE_TURBO_AUTOCALIBRATE + +tape_turbo_sync_calibrate: + + ldy #$80 + + // FALLTROUGH + +tape_turbo_sync_calibrate_loop: + + // Skip 5 bits + phy_trash_a + ldy #$04 +!: + jsr tape_turbo_get_bit + bcs tape_turbo_sync_header + dey + bpl !- + + jsr tape_turbo_sync_measure_0 + jsr tape_turbo_sync_measure_1 + jsr tape_turbo_sync_measure_0 + + ply_trash_a + dey + bne tape_turbo_sync_calibrate_loop + + // Calculate new pulse threshold as arithmetic mean + // We accumulated 256 zeros and 128 ones, so calculating average value is easy + + lda STACK+0 + clc + ror + clc + adc STACK+1 + sta IRQTMP+0 + + // FALLTROUGH + +#endif // CONFIG_TAPE_TURBO_AUTOCALIBRATE + tape_turbo_sync_payload: jsr tape_turbo_sync_common diff --git a/c64/kernal/tape/tape_turbo_sync_measure.s b/c64/kernal/tape/tape_turbo_sync_measure.s new file mode 100644 index 00000000..d68349db --- /dev/null +++ b/c64/kernal/tape/tape_turbo_sync_measure.s @@ -0,0 +1,46 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + +// +// Tape (turbo) helper routine - measure bit length for calibration purposes +// + +#if CONFIG_TAPE_TURBO && CONFIG_TAPE_TURBO_AUTOCALIBRATE + + +tape_turbo_sync_measure_0: + + // Measure bit '0' + jsr tape_turbo_get_bit + bcs tape_turbo_sync_measure_fail + txa + adc STACK+2 + sta STACK+2 + bcc !+ + inc STACK+0 +!: + rts + +tape_turbo_sync_measure_1: + + // Measure bit '1' + jsr tape_turbo_get_bit + bcc tape_turbo_sync_measure_fail + txa + adc STACK+3 + sta STACK+3 + bcc !+ + inc STACK+1 +!: + rts + +tape_turbo_sync_measure_fail: + + pla + pla + jmp tape_turbo_sync_header + + +#endif + + +#endif // ROM layout From 30238362c161b8f1bc7b2f533d8aeffdbb1fd8ab Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Tue, 14 Jan 2020 18:06:24 +0100 Subject: [PATCH 63/77] preparation for calling routines from mapped memory --- c64/aliases/,aliases_config.s | 6 +-- c64/kernal/banking/4000.mega65_kernal_1.s | 21 ++++++++-- c64/kernal/banking/mega65_mapping.s | 51 +++++++++++++++++++++++ 3 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 c64/kernal/banking/mega65_mapping.s diff --git a/c64/aliases/,aliases_config.s b/c64/aliases/,aliases_config.s index 6d97e40c..953c5ee7 100644 --- a/c64/aliases/,aliases_config.s +++ b/c64/aliases/,aliases_config.s @@ -102,9 +102,9 @@ // Check that memory model and ROM layout configurations is correct { -//#if ROM_LAYOUT_M65 && !CONFIG_CPU_M65_45GS02 -// .error "Mega65 ROM layout requires CONFIG_CPU_M65_45GS02" -//#endif +#if ROM_LAYOUT_M65 && !CONFIG_CPU_M65_45GS02 + .error "Mega65 ROM layout requires CONFIG_CPU_M65_45GS02" +#endif //#if ROM_LAYOUT_M65 && !CONFIG_MB_MEGA_65 // .error "Mega65 ROM layout requires CONFIG_MB_MEGA_65" //#endif diff --git a/c64/kernal/banking/4000.mega65_kernal_1.s b/c64/kernal/banking/4000.mega65_kernal_1.s index ffaaf370..fbe3311a 100644 --- a/c64/kernal/banking/4000.mega65_kernal_1.s +++ b/c64/kernal/banking/4000.mega65_kernal_1.s @@ -1,13 +1,28 @@ -#if (ROM_LAYOUT_M65 && SEGMENT_KERNAL_1) // // Definitions for communication with Mega65 segment KERNAL_1 // -// XXX this is for testing only +#if (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + + // Labels for jumps + + +.label KERNAL_1__TESTROUTINE = $4000 + + +#elif (ROM_LAYOUT_M65 && SEGMENT_KERNAL_1) + + // Jumptable (OpenROMs private!) + + + jmp TESTROUTINE + + +TESTROUTINE: rts -#endif // ROM layout +#endif diff --git a/c64/kernal/banking/mega65_mapping.s b/c64/kernal/banking/mega65_mapping.s new file mode 100644 index 00000000..d4f037f1 --- /dev/null +++ b/c64/kernal/banking/mega65_mapping.s @@ -0,0 +1,51 @@ +#if (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + +// +// ROM mapping routines for Mega65 +// + + +map_NORMAL: + + pha + phx + phy + phz + + lda #$00 + tax + tay + taz + + // FALLTROUGH + +map_end: + + map + eom + + plz + ply + plx + pla + + rts + + +map_KERNAL_1: + + pha + phx + phy + phz + + lda #$00 + tay + taz + + ldx #$42 // XXX map 8KB from 0x20000 to 0x4000 - somehow does not seem to work + + bne map_end + + +#endif // ROM layout From 8e162a316198babcb3fe9c6d884914cbe6505920 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Tue, 14 Jan 2020 18:12:20 +0100 Subject: [PATCH 64/77] tape code size optimization --- c64/kernal/tape/tape_common_prepare_cia.s | 2 +- c64/kernal/tape/tape_turbo_get_bit.s | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/c64/kernal/tape/tape_common_prepare_cia.s b/c64/kernal/tape/tape_common_prepare_cia.s index ac141cee..d9f962f1 100644 --- a/c64/kernal/tape/tape_common_prepare_cia.s +++ b/c64/kernal/tape/tape_common_prepare_cia.s @@ -8,7 +8,7 @@ tape_common_prepare_cia: // Setup CIA #2 timers - ldx #$03 // set timer A to 4 ticks XXX consider setting to 8 + ldx #$03 // set timer A to 4 ticks stx CIA2_TIMALO // $DD04 ldx #$00 stx CIA2_TIMAHI // $DD05 diff --git a/c64/kernal/tape/tape_turbo_get_bit.s b/c64/kernal/tape/tape_turbo_get_bit.s index 31c5a82f..ccd16571 100644 --- a/c64/kernal/tape/tape_turbo_get_bit.s +++ b/c64/kernal/tape/tape_turbo_get_bit.s @@ -13,6 +13,12 @@ tape_turbo_get_bit: +#if CONFIG_TAPE_NORMAL + + jsr tape_normal_get_pulse // reuse routine from NORMAL system + +#else + lda #$10 !: bit CIA1_ICR // $DC0D @@ -21,6 +27,9 @@ tape_turbo_get_bit: ldx #%01010001 // start timer, force latch reload, count timer A underflows stx CIA2_CRB // $DD0F +#endif + + #if CONFIG_TAPE_TURBO_AUTOCALIBRATE tax cmp IRQTMP+0 From a7845ac4c6ca9d2100488702288751311862fb67 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Tue, 14 Jan 2020 19:12:29 +0100 Subject: [PATCH 65/77] further improved turbo tape calibration sequence --- c64/kernal/tape/tape_turbo_sync.s | 20 +++++++++----------- c64/kernal/tape/tape_turbo_sync_first.s | 24 ++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 11 deletions(-) create mode 100644 c64/kernal/tape/tape_turbo_sync_first.s diff --git a/c64/kernal/tape/tape_turbo_sync.s b/c64/kernal/tape/tape_turbo_sync.s index d442789f..2e2fc2ae 100644 --- a/c64/kernal/tape/tape_turbo_sync.s +++ b/c64/kernal/tape/tape_turbo_sync.s @@ -11,17 +11,9 @@ #if CONFIG_TAPE_TURBO -tape_turbo_sync_common: - - jsr tape_turbo_get_bit - rol INBIT - lda INBIT - cmp #$02 - bne tape_turbo_sync_common - rts - tape_turbo_sync_header: + #if CONFIG_TAPE_TURBO_AUTOCALIBRATE // Initial pulse threshold @@ -38,13 +30,19 @@ tape_turbo_sync_header: #endif // CONFIG_TAPE_TURBO_AUTOCALIBRATE + // Synchronize with start of sync sequence + jsr tape_turbo_sync_first + // Perform synchronization ldx #$C0 !: phx_trash_a ldy #$04 !: - jsr tape_turbo_sync_common + jsr tape_turbo_get_byte + cmp #$02 + bne tape_turbo_sync_header // branch if failure + dey bne !- plx_trash_a @@ -96,7 +94,7 @@ tape_turbo_sync_calibrate_loop: tape_turbo_sync_payload: - jsr tape_turbo_sync_common + jsr tape_turbo_sync_first !: ldx #$09 // 9, 8, ... !: diff --git a/c64/kernal/tape/tape_turbo_sync_first.s b/c64/kernal/tape/tape_turbo_sync_first.s new file mode 100644 index 00000000..2d7bc533 --- /dev/null +++ b/c64/kernal/tape/tape_turbo_sync_first.s @@ -0,0 +1,24 @@ +#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + +// +// Tape (turbo) helper routine - syynchronize to first byte with value $02 +// + +#if CONFIG_TAPE_TURBO + + +tape_turbo_sync_first: + + jsr tape_turbo_get_bit + rol INBIT + lda INBIT + cmp #$02 + bne tape_turbo_sync_first + + rts + + +#endif + + +#endif // ROM layout From 41c94e05771c2c514e0471f1440e73fc4687a965 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Tue, 14 Jan 2020 19:41:28 +0100 Subject: [PATCH 66/77] removed old debug instruction --- c64/basic/commands/cmd_list.s | 1 - 1 file changed, 1 deletion(-) diff --git a/c64/basic/commands/cmd_list.s b/c64/basic/commands/cmd_list.s index 7c79e958..ef3822cf 100644 --- a/c64/basic/commands/cmd_list.s +++ b/c64/basic/commands/cmd_list.s @@ -127,7 +127,6 @@ list_not_quote: bne list_not_rem // REM command locks quote flag on until the end of the line, allowing // funny characters in REM statements without problem. - inc $0427 sta QTSW // Any value other than $00 or $FF will lock quote mode on, so the token value of REM is fine here // FALL THROUGH list_not_rem: From 73f05a13c8eeb1079526f761cbd67912458168c5 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 15 Jan 2020 17:54:29 +0100 Subject: [PATCH 67/77] added pragma support to build_segment tool --- Makefile | 25 +++--- c64/kernal/banking/4000.mega65_kernal_1.s | 9 +- c64/kernal/banking/mega65_mapping.s | 12 +-- c64/kernal/init/fda3.ioinit.s | 6 ++ src/build_segment.cc | 103 ++++++++++++++++++++-- 5 files changed, 131 insertions(+), 24 deletions(-) diff --git a/Makefile b/Makefile index fe065856..d3ab3700 100644 --- a/Makefile +++ b/Makefile @@ -65,12 +65,12 @@ STD_TARGET_LIST_MEGA65 = build/kernal_mega65.rom_0 \ build/kernal_mega65.rom_1 \ build/basic_mega65.rom_0 -STD_TARGET_LIST = $(STD_TARGET_LIST_CUSTOM) \ +STD_TARGET_LIST = build/chargen.rom \ + $(STD_TARGET_LIST_CUSTOM) \ $(STD_TARGET_LIST_GENERIC) \ $(STD_TARGET_LIST_TESTING) \ $(STD_TARGET_LIST_MEGA65) \ - $(STD_TARGET_LIST_ULTIMATE64) \ - build/chargen.rom + $(STD_TARGET_LIST_ULTIMATE64) EXT_TARGET_LIST = build/mega65.rom @@ -222,7 +222,7 @@ build/target_mega65/OUTK_0.BIN build/target_mega65/KERNAL_0_combined.vs build/ta @rm -f $@* build/target_mega65/KERNAL_0* @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s KERNAL_0 -i KERNAL_0-mega65 -o OUTK_0.BIN -d build/target_mega65 -l e4d3 -h ffff c64/,,config_mega65.s $(SRCDIR_KERNAL) $(GEN_KERNAL) -build/kernal_mega65.rom_1 build/target_mega65/OUTK_1.BIN build/target_mega65/KERNAL_1_combined.vs build/target_mega65/KERNAL_1_combined.sym: +build/kernal_mega65.rom_1 build/target_mega65/OUTK_1.BIN build/target_mega65/KERNAL_1_combined.vs build/target_mega65/KERNAL_1_combined.sym: $(TOOL_BUILD_SEGMENT) @mkdir -p build/target_mega65 @rm -f $@* build/kernal_mega65.rom_1 build/target_mega65/KERNAL_1* @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s KERNAL_1 -i KERNAL_1-mega65 -o OUTK_1.BIN -d build/target_mega65 -l 4000 -h 5fff c64/,,config_mega65.s $(SRCDIR_KERNAL) $(GEN_KERNAL) @@ -268,12 +268,17 @@ build/symbols_hybrid.vs: build/target_generic/KERNAL_combined.vs # Rules - platform 'Mega 65' specific build/mega65.rom: build/kernal_mega65.rom_0 build/kernal_mega65.rom_1 build/basic_mega65.rom_0 build/chargen.rom - cat build/kernal_mega65.rom_1 > build/mega65.rom - dd if=/dev/zero bs=4096 count=8 of=build/padding1 - cat build/padding1 >> build/mega65.rom - cat build/basic_mega65.rom_0 build/chargen.rom build/chargen.rom build/kernal_mega65.rom_0 >> build/mega65.rom - dd if=/dev/zero bs=4096 count=16 of=build/padding2 - cat build/padding2 >> build/mega65.rom + dd if=/dev/zero bs=8192 count=1 of=build/padding_8k + dd if=/dev/zero bs=8192 count=8 of=build/padding_64k + cat build/padding_8k > build/mega65.rom + cat build/padding_8k >> build/mega65.rom + cat build/kernal_mega65.rom_1 >> build/mega65.rom + cat build/padding_8k >> build/mega65.rom + cat build/padding_8k >> build/mega65.rom + cat build/basic_mega65.rom_0 >> build/mega65.rom + cat build/chargen.rom build/chargen.rom >> build/mega65.rom + cat build/kernal_mega65.rom_0 >> build/mega65.rom + cat build/padding_64k >> build/mega65.rom rm -f build/padding* # Rules - tests diff --git a/c64/kernal/banking/4000.mega65_kernal_1.s b/c64/kernal/banking/4000.mega65_kernal_1.s index fbe3311a..9f29f67c 100644 --- a/c64/kernal/banking/4000.mega65_kernal_1.s +++ b/c64/kernal/banking/4000.mega65_kernal_1.s @@ -1,18 +1,21 @@ +// #LAYOUT# M65 KERNAL_0 #TAKE-FLOAT +// #LAYOUT# M65 KERNAL_1 #TAKE +// #LAYOUT# * * #IGNORE // // Definitions for communication with Mega65 segment KERNAL_1 // -#if (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +#if SEGMENT_KERNAL_0 // Labels for jumps -.label KERNAL_1__TESTROUTINE = $4000 + .label KERNAL_1__TESTROUTINE = $4000 -#elif (ROM_LAYOUT_M65 && SEGMENT_KERNAL_1) +#elif // Jumptable (OpenROMs private!) diff --git a/c64/kernal/banking/mega65_mapping.s b/c64/kernal/banking/mega65_mapping.s index d4f037f1..38672f12 100644 --- a/c64/kernal/banking/mega65_mapping.s +++ b/c64/kernal/banking/mega65_mapping.s @@ -1,9 +1,14 @@ -#if (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# M65 KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // ROM mapping routines for Mega65 // +// Available memory maps: +// - NORMAL - nothing mapped in +// - KERNAL_1 - for calling KERNAL_1 segment code + map_NORMAL: @@ -43,9 +48,6 @@ map_KERNAL_1: tay taz - ldx #$42 // XXX map 8KB from 0x20000 to 0x4000 - somehow does not seem to work + ldx #$42 // 0x4000 <- map 8KB from 0x20000 bne map_end - - -#endif // ROM layout diff --git a/c64/kernal/init/fda3.ioinit.s b/c64/kernal/init/fda3.ioinit.s index 758b2dab..f55ac9d3 100644 --- a/c64/kernal/init/fda3.ioinit.s +++ b/c64/kernal/init/fda3.ioinit.s @@ -12,6 +12,12 @@ IOINIT: + // XXX make something useful with this + // + // jsr map_KERNAL_1 + // jsr KERNAL_1__TESTROUTINE + // jsr map_NORMAL + // // First initialize the CPU port, to make sure we have correct memory map // diff --git a/src/build_segment.cc b/src/build_segment.cc index 67c85dbf..8ab7d925 100644 --- a/src/build_segment.cc +++ b/src/build_segment.cc @@ -79,9 +79,14 @@ class SourceFile public: SourceFile(const std::string &fileName, const std::string &dirName); + void preprocess(); + bool preprocessLine(const std::string &line); + bool nameMatch(const std::string &token, const std::string &name); + std::string fileName; std::string dirName; + bool ignore; bool floating; std::vector content; @@ -120,7 +125,7 @@ public: class Solver { public: - Solver(BinningProblem &problem) : problem(problem), logOutput(logFile, std::cout) {} + explicit Solver(BinningProblem &problem) : problem(problem), logOutput(logFile, std::cout) {} void run(); @@ -164,7 +169,7 @@ void parseCommandLine(int argc, char **argv) case 'd': CMD_outDir = optarg; break; case 's': CMD_segName = optarg; break; case 'i': CMD_segInfo = optarg; break; - case 'r': CMD_romLayout = optarg; break; + case 'r': CMD_romLayout = optarg; break; case 'l': CMD_loAddress = strtol(optarg, nullptr ,16); break; case 'h': CMD_hiAddress = strtol(optarg, nullptr ,16); break; default: printUsage(); ERROR(); @@ -196,7 +201,7 @@ void readSourceFiles() // This is a regular file char *tmp1 = strdup(objName.c_str()); - char *tmp2 = strdup(objName.c_str()); + char *tmp2 = strdup(objName.c_str()); std::string dirName = dirname(tmp1); std::string fileName = basename(tmp2); @@ -235,6 +240,11 @@ void readSourceFiles() closedir(dirHandle); } + // Filter-out files marked as ignored + + GLOBAL_sourceFiles.erase(std::remove_if(GLOBAL_sourceFiles.begin(), GLOBAL_sourceFiles.end(), + [](const SourceFile &sourceFile) -> bool { return sourceFile.ignore; }), GLOBAL_sourceFiles.end()); + if (GLOBAL_sourceFiles.empty()) ERROR("no source files found"); // Sort the file list by name, to provide deterministic results @@ -485,7 +495,7 @@ void compileSegment() ", outBin=\"" << CMD_outFile << "\", fill]" << "\n"; outFile << "#define SEGMENT_" << CMD_segName << "\n"; - outFile << "#define ROM_LAYOUT_" << CMD_romLayout << "\n"; + outFile << "#define ROM_LAYOUT_" << CMD_romLayout << "\n"; outFile << ".namespace " << CMD_segName << " {" << "\n\n"; // Write files which only contain definitions (no routines) @@ -557,6 +567,7 @@ int main(int argc, char **argv) SourceFile::SourceFile(const std::string &fileName, const std::string &dirName) : fileName(fileName), dirName(dirName), + ignore(false), floating(false), startAddr(-1), codeLength(-1), @@ -607,6 +618,10 @@ SourceFile::SourceFile(const std::string &fileName, const std::string &dirName) startAddr = strtol(fileName.substr(0, 4).c_str(), nullptr ,16); } + // Preprocess the file (apply settings from the content) + + preprocess(); + // Generate KickAss compatible label from the file name label = fileName.substr(0, fileName.length() - 2); @@ -615,6 +630,82 @@ SourceFile::SourceFile(const std::string &fileName, const std::string &dirName) std::replace(label.begin(), label.end(), ',', '_'); } +void SourceFile::preprocess() +{ + std::string contentStr(content.begin(), content.end()); + std::istringstream stream(contentStr); + std::string line; + + while (std::getline(stream, line)) + { + if (line.empty()) continue; + std::replace(std::begin(line), std::end(line), '\t', ' '); + if (!preprocessLine(line)) break; + } +} + +bool SourceFile::preprocessLine(const std::string &line) +{ + // Split the line into tokens + + std::list tokens; + + std::istringstream stream(line); + std::string token; + while(std::getline(stream, token, ' ')) + { + if (token.empty()) continue; + tokens.push_back(token); + } + if (tokens.empty()) return true; + + // Now preprocess line using the token list + + auto iter = tokens.begin(); + + // Injest the comment token + + if ((iter++)->compare("//") != 0 || iter == tokens.end()) return true; + + // Check if supported directive + + if ((iter++)->compare("#LAYOUT#") != 0) return true; + + // Check if segment name and rom layout match + + if (iter == tokens.end()) ERROR("syntax error, missing segment name in '#LAYOUT#'"); + if (!nameMatch(*(iter++), CMD_segName)) return true; + + if (iter == tokens.end()) ERROR("syntax error, missing rom layout in '#LAYOUT#'"); + if (!nameMatch(*(iter++), CMD_romLayout)) return true; + + // Retrieve and apply action + + if (iter == tokens.end()) ERROR("syntax error, missing action in '#LAYOUT#'"); + + if (iter->compare("#IGNORE") == 0) + { + ignore = true; + } + else if (iter->compare("#TAKE-FLOAT") == 0) + { + floating = true; + } + else if (iter->compare("#TAKE") != 0) + { + ERROR("syntax error, unsupported action in '#LAYOUT#'"); + } + + // Tell the caller to finish processing the file + + return false; +} + +bool SourceFile::nameMatch(const std::string &token, const std::string &name) +{ + return (token.compare("*") == 0) || (token.compare(name) == 0); +} + // // Class 'BinningProblem' // @@ -630,7 +721,7 @@ BinningProblem::BinningProblem(int loAddress, int hiAddress) gaps[loAddress] = hiAddress - loAddress + 1; - // Initial value of statistics + // Initial value of statistics statSize = gaps[loAddress]; statFree = gaps[loAddress]; @@ -672,7 +763,7 @@ void BinningProblem::addToProblem(SourceFile *routine) // Put the routine into the gap, possibly removing it or splitting into two fixedRoutines[routine->startAddr] = routine; - statFree -= routine->codeLength; + statFree -= routine->codeLength; // Calculate possible new gap after the routine From 435ff6bbc2d5a8b767444f5862dfd74838e0832d Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 15 Jan 2020 18:30:37 +0100 Subject: [PATCH 68/77] moved RAMTAS to Mega65 extra ROM, as a proof of concept --- Makefile | 19 ++++++------------- ...l_1.s => 4000.mega65_jumptable_kernal_1.s} | 11 +++-------- ...{mega65_mapping.s => mega65_map_helpers.s} | 3 +++ c64/kernal/init/fd50.ramtas.s | 14 ++++++++++++-- c64/kernal/init/fda3.ioinit.s | 6 ------ src/build_segment.cc | 6 +++--- 6 files changed, 27 insertions(+), 32 deletions(-) rename c64/kernal/banking/{4000.mega65_kernal_1.s => 4000.mega65_jumptable_kernal_1.s} (76%) rename c64/kernal/banking/{mega65_mapping.s => mega65_map_helpers.s} (96%) diff --git a/Makefile b/Makefile index d3ab3700..c220d998 100644 --- a/Makefile +++ b/Makefile @@ -61,9 +61,7 @@ STD_TARGET_LIST_CUSTOM = build/kernal_custom.rom build/basic_custom.rom STD_TARGET_LIST_GENERIC = build/kernal_generic.rom build/basic_generic.rom STD_TARGET_LIST_TESTING = build/kernal_testing.rom build/basic_testing.rom STD_TARGET_LIST_ULTIMATE64 = build/kernal_ultimate64.rom build/basic_ultimate64.rom -STD_TARGET_LIST_MEGA65 = build/kernal_mega65.rom_0 \ - build/kernal_mega65.rom_1 \ - build/basic_mega65.rom_0 +STD_TARGET_LIST_MEGA65 = build/mega65.rom STD_TARGET_LIST = build/chargen.rom \ $(STD_TARGET_LIST_CUSTOM) \ @@ -161,10 +159,6 @@ build/target_mega65/OUTK_0.BIN build/target_mega65/KERNAL_0_combined.vs bu $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(GEN_KERNAL) $(SRCDIR_KERNAL) \ c64/,,config_mega65.s \ $(foreach dir,$(SRCDIR_KERNAL),$(wildcard $(dir)/*.s)) -build/target_mega65/OUTK_1.BIN build/target_mega65/KERNAL_1_combined.vs build/target_mega65/KERNAL_1_combined.sym: \ - $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(GEN_KERNAL) $(SRCDIR_KERNAL) \ - c64/,,config_mega65.s \ - $(foreach dir,$(SRCDIR_KERNAL),$(wildcard $(dir)/*.s)) build/target_ultimate64/OUTK.BIN build/target_ultimate64/KERNAL_combined.vs build/target_ultimate64/KERNAL_combined.sym: \ $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(GEN_KERNAL) $(SRCDIR_KERNAL) \ c64/,,config_ultimate64.s \ @@ -222,11 +216,10 @@ build/target_mega65/OUTK_0.BIN build/target_mega65/KERNAL_0_combined.vs build/ta @rm -f $@* build/target_mega65/KERNAL_0* @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s KERNAL_0 -i KERNAL_0-mega65 -o OUTK_0.BIN -d build/target_mega65 -l e4d3 -h ffff c64/,,config_mega65.s $(SRCDIR_KERNAL) $(GEN_KERNAL) -build/kernal_mega65.rom_1 build/target_mega65/OUTK_1.BIN build/target_mega65/KERNAL_1_combined.vs build/target_mega65/KERNAL_1_combined.sym: $(TOOL_BUILD_SEGMENT) +build/target_mega65/kernal.seg_1 build/target_mega65/KERNAL_1_combined.vs build/target_mega65/KERNAL_1_combined.sym: $(TOOL_BUILD_SEGMENT) @mkdir -p build/target_mega65 - @rm -f $@* build/kernal_mega65.rom_1 build/target_mega65/KERNAL_1* - @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s KERNAL_1 -i KERNAL_1-mega65 -o OUTK_1.BIN -d build/target_mega65 -l 4000 -h 5fff c64/,,config_mega65.s $(SRCDIR_KERNAL) $(GEN_KERNAL) - @cp build/target_mega65/OUTK_1.BIN build/kernal_mega65.rom_1 + @rm -f $@* build/target_mega65/kernal.seg_1 build/target_mega65/KERNAL_1* + @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s KERNAL_1 -i KERNAL_1-mega65 -o kernal.seg_1 -d build/target_mega65 -l 4000 -h 5fff c64/,,config_mega65.s $(SRCDIR_KERNAL) $(GEN_KERNAL) .PRECIOUS: build/target_%/newrom build/target_%/newrom: @@ -267,12 +260,12 @@ build/symbols_hybrid.vs: build/target_generic/KERNAL_combined.vs # Rules - platform 'Mega 65' specific -build/mega65.rom: build/kernal_mega65.rom_0 build/kernal_mega65.rom_1 build/basic_mega65.rom_0 build/chargen.rom +build/mega65.rom: build/kernal_mega65.rom_0 build/target_mega65/kernal.seg_1 build/basic_mega65.rom_0 build/chargen.rom dd if=/dev/zero bs=8192 count=1 of=build/padding_8k dd if=/dev/zero bs=8192 count=8 of=build/padding_64k cat build/padding_8k > build/mega65.rom cat build/padding_8k >> build/mega65.rom - cat build/kernal_mega65.rom_1 >> build/mega65.rom + cat build/target_mega65/kernal.seg_1 >> build/mega65.rom cat build/padding_8k >> build/mega65.rom cat build/padding_8k >> build/mega65.rom cat build/basic_mega65.rom_0 >> build/mega65.rom diff --git a/c64/kernal/banking/4000.mega65_kernal_1.s b/c64/kernal/banking/4000.mega65_jumptable_kernal_1.s similarity index 76% rename from c64/kernal/banking/4000.mega65_kernal_1.s rename to c64/kernal/banking/4000.mega65_jumptable_kernal_1.s index 9f29f67c..001d624e 100644 --- a/c64/kernal/banking/4000.mega65_kernal_1.s +++ b/c64/kernal/banking/4000.mega65_jumptable_kernal_1.s @@ -12,20 +12,15 @@ // Labels for jumps - .label KERNAL_1__TESTROUTINE = $4000 + .label KERNAL_1__RAMTAS = $4000 -#elif +#else // Jumptable (OpenROMs private!) - jmp TESTROUTINE - - -TESTROUTINE: - - rts + jmp RAMTAS #endif diff --git a/c64/kernal/banking/mega65_mapping.s b/c64/kernal/banking/mega65_map_helpers.s similarity index 96% rename from c64/kernal/banking/mega65_mapping.s rename to c64/kernal/banking/mega65_map_helpers.s index 38672f12..0009100f 100644 --- a/c64/kernal/banking/mega65_mapping.s +++ b/c64/kernal/banking/mega65_map_helpers.s @@ -12,6 +12,7 @@ map_NORMAL: + php pha phx phy @@ -33,12 +34,14 @@ map_end: ply plx pla + plp rts map_KERNAL_1: + php pha phx phy diff --git a/c64/kernal/init/fd50.ramtas.s b/c64/kernal/init/fd50.ramtas.s index 9e1b0f9d..cb135a4a 100644 --- a/c64/kernal/init/fd50.ramtas.s +++ b/c64/kernal/init/fd50.ramtas.s @@ -1,4 +1,7 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# M65 KERNAL_0 #TAKE +// #LAYOUT# M65 KERNAL_1 #TAKE-FLOAT +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -11,6 +14,14 @@ RAMTAS: +#if (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + + jsr map_KERNAL_1 + jsr KERNAL_1__RAMTAS + jmp map_NORMAL + +#else + // C64 Programmers Reference guide p291: // Clear $0000-$0101, $0200-$03ff // PGS: $0000, $0001 are CPU IO ports, so should not get written to @@ -83,5 +94,4 @@ ramtas_32k: ldy #$80 bne !- // branch always - #endif // ROM layout diff --git a/c64/kernal/init/fda3.ioinit.s b/c64/kernal/init/fda3.ioinit.s index f55ac9d3..758b2dab 100644 --- a/c64/kernal/init/fda3.ioinit.s +++ b/c64/kernal/init/fda3.ioinit.s @@ -12,12 +12,6 @@ IOINIT: - // XXX make something useful with this - // - // jsr map_KERNAL_1 - // jsr KERNAL_1__TESTROUTINE - // jsr map_NORMAL - // // First initialize the CPU port, to make sure we have correct memory map // diff --git a/src/build_segment.cc b/src/build_segment.cc index 8ab7d925..2c281c43 100644 --- a/src/build_segment.cc +++ b/src/build_segment.cc @@ -673,12 +673,12 @@ bool SourceFile::preprocessLine(const std::string &line) // Check if segment name and rom layout match - if (iter == tokens.end()) ERROR("syntax error, missing segment name in '#LAYOUT#'"); - if (!nameMatch(*(iter++), CMD_segName)) return true; - if (iter == tokens.end()) ERROR("syntax error, missing rom layout in '#LAYOUT#'"); if (!nameMatch(*(iter++), CMD_romLayout)) return true; + if (iter == tokens.end()) ERROR("syntax error, missing segment name in '#LAYOUT#'"); + if (!nameMatch(*(iter++), CMD_segName)) return true; + // Retrieve and apply action if (iter == tokens.end()) ERROR("syntax error, missing action in '#LAYOUT#'"); From 63c04043136b6e29a1b50d47902aca1cf06f9244 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 15 Jan 2020 20:06:14 +0100 Subject: [PATCH 69/77] migrated code to pragma-like ROM layout definitions --- c64/basic/,stubs/a408.reason.s | 8 +- c64/basic/,stubs/a453.unknown.s | 8 +- c64/basic/,stubs/a57c.chrnch.s | 7 +- c64/basic/,stubs/a644.new.s | 8 +- c64/basic/,stubs/a659.setcharptr.s | 8 +- c64/basic/,stubs/a71a.qplop.s | 7 +- c64/basic/,stubs/a7e4.gone.s | 7 +- c64/basic/,stubs/ad9e.frmevl.s | 8 +- c64/basic/,stubs/ae86.eval.s | 7 +- c64/basic/,stubs/e38b.error.s | 7 +- c64/basic/,stubs/e3bf.init.s | 8 +- c64/basic/,stubs/e453.rvect.s | 8 +- c64/basic/a533.linkprg.s | 7 +- c64/basic/a68e.runc.s | 7 +- c64/basic/a7ae.newstt.s | 7 +- c64/basic/ab1e.strout.s | 7 +- c64/basic/basic_adray1.s | 8 +- c64/basic/basic_adray2.s | 7 +- c64/basic/basic_delete_line.s | 7 +- c64/basic/basic_do_error.s | 7 +- c64/basic/basic_execute_line.s | 7 +- c64/basic/basic_find_line.s | 8 +- c64/basic/basic_find_next_line.s | 7 +- c64/basic/basic_follow_link_to_next_line.s | 8 +- c64/basic/basic_insert_line.s | 7 +- c64/basic/basic_main_loop.s | 7 +- c64/basic/basic_parse_line_number.s | 7 +- c64/basic/basic_shift_mem_down.s | 7 +- c64/basic/basic_shift_mem_up.s | 7 +- c64/basic/basic_vector_defaults.s | 7 +- c64/basic/bdcd.linprt.s | 7 +- c64/basic/c000.skip_gap.s | 8 +- c64/basic/commands/cmd_break.s | 7 +- c64/basic/commands/cmd_list.s | 8 +- c64/basic/commands/cmd_load.s | 7 +- c64/basic/commands/cmd_new.s | 7 +- c64/basic/commands/cmd_rem.s | 8 +- c64/basic/commands/cmd_run.s | 7 +- c64/basic/commands/cmd_sys.s | 7 +- c64/basic/commands/cmd_unimplemented.s | 7 +- c64/basic/do_basic_error.s | 9 +- c64/basic/fac1_mul.s | 7 +- c64/basic/init/a000.cold_start_vector.s | 8 +- c64/basic/init/a002.warm_start_vector.s | 8 +- c64/basic/init/basic_cold_start_internal.s | 7 +- c64/basic/init/basic_warm_start_internal.s | 7 +- c64/basic/init/e394.basic_cold_start.s | 7 +- c64/basic/init/e3b7.basic_warm_start.jmp.s | 8 +- c64/basic/init/e422.initmsg.jmp.s | 7 +- c64/basic/init/initmsg_bytes_free.s | 7 +- c64/basic/init/initmsg_real.s | 8 +- c64/basic/init/startup_banner.s | 7 +- c64/basic/init_oldtxt.s | 7 +- c64/basic/injest_comma.s | 7 +- c64/basic/injest_number.s | 7 +- c64/basic/pack_word.s | 7 +- c64/basic/peek_line_pointer_null_check.s | 7 +- c64/basic/print_integer.s | 7 +- c64/basic/print_packed_message.s | 7 +- c64/basic/ready_message.s | 7 +- c64/basic/rom_revision/a004.identifier.s | 8 +- .../rom_revision/bf52.rom_revision_basic.s | 7 +- .../rom_revision/e4b7.rom_revision_kernal.s | 7 +- c64/basic/select_device.s | 7 +- c64/basic/tokenise_line.s | 7 +- c64/basic/under_rom_routines.s | 7 +- c64/basic/wedge_dos.s | 7 +- c64/basic/wedge_tape.s | 7 +- c64/kernal/,disabled/u64_load.s | 7 +- c64/kernal/,stubs/e6b6.advance_cursor.s | 8 +- c64/kernal/,stubs/e701.previous_line.s | 8 +- c64/kernal/,stubs/e716.chrout_screen.s | 8 +- c64/kernal/,stubs/e96c.insert_line_at_top.s | 8 +- c64/kernal/,stubs/f3f6.unknown.s | 8 +- c64/kernal/,stubs/f646.iec_close.s | 8 +- c64/kernal/,stubs/fd90.unknown.s | 8 +- c64/kernal/errors.s | 7 +- c64/kernal/iec/acptr.s | 7 +- c64/kernal/iec/chkin_iec.s | 7 +- c64/kernal/iec/chrin_iec.s | 7 +- c64/kernal/iec/chrout_iec.s | 7 +- c64/kernal/iec/ciout.s | 7 +- c64/kernal/iec/ckout_iec.s | 7 +- c64/kernal/iec/close_iec.s | 7 +- c64/kernal/iec/clrchn_iec.s | 7 +- c64/kernal/iec/iec_check_devnum.s | 7 +- c64/kernal/iec/iec_close_load.s | 7 +- c64/kernal/iec/iec_cmd_close.s | 7 +- c64/kernal/iec/iec_cmd_open.s | 7 +- c64/kernal/iec/iec_pull_release.s | 177 ++++++------ c64/kernal/iec/iec_return.s | 7 +- c64/kernal/iec/iec_rx_byte.s | 7 +- c64/kernal/iec/iec_rx_check_eoi.s | 7 +- c64/kernal/iec/iec_send_file_name.s | 7 +- c64/kernal/iec/iec_set_idle.s | 7 +- c64/kernal/iec/iec_turnaround_to_listen.s | 7 +- c64/kernal/iec/iec_turnaround_to_talk.s | 7 +- c64/kernal/iec/iec_tx_byte.s | 7 +- c64/kernal/iec/iec_tx_command.s | 7 +- c64/kernal/iec/iec_tx_command_finalize.s | 8 +- c64/kernal/iec/iec_tx_flush.s | 7 +- c64/kernal/iec/iec_update_eal_by_y.s | 7 +- c64/kernal/iec/iec_wait1ms.s | 7 +- c64/kernal/iec/iec_wait20us.s | 7 +- c64/kernal/iec/iec_wait60us.s | 7 +- c64/kernal/iec/iec_wait_for_clk_release.s | 7 +- c64/kernal/iec/iec_wait_for_data_pull.s | 7 +- c64/kernal/iec/iec_wait_for_data_release.s | 7 +- c64/kernal/iec/listen.s | 7 +- c64/kernal/iec/load_iec.s | 7 +- c64/kernal/iec/open_iec.s | 7 +- c64/kernal/iec/save_iec.s | 7 +- c64/kernal/iec/second.s | 7 +- c64/kernal/iec/talk.s | 7 +- c64/kernal/iec/tksa.s | 7 +- c64/kernal/iec/unlsn.s | 7 +- c64/kernal/iec/untlk.s | 7 +- c64/kernal/iec_fast/burst_cia1_advertise.s | 7 +- c64/kernal/iec_fast/burst_cia2_advertise.s | 7 +- c64/kernal/iec_fast/burst_soft_advertise.s | 7 +- c64/kernal/iec_fast/dolphindos_detect.s | 7 +- c64/kernal/iec_fast/dolphindos_load.s | 7 +- c64/kernal/iec_fast/jiffydos_bittable.s | 7 +- c64/kernal/iec_fast/jiffydos_detect.s | 7 +- c64/kernal/iec_fast/jiffydos_load.s | 7 +- c64/kernal/iec_fast/jiffydos_prepare.s | 7 +- c64/kernal/iec_fast/jiffydos_rx_byte.s | 7 +- c64/kernal/iec_fast/jiffydos_tx_byte.s | 7 +- c64/kernal/iec_fast/jiffydos_wait_line.s | 7 +- c64/kernal/init/cartridge_check.s | 20 +- c64/kernal/init/cint_screen_keyboard.s | 9 +- c64/kernal/init/e518.cint_legacy.s | 7 +- c64/kernal/init/e5a0.setup_vicii.s | 7 +- c64/kernal/init/fce2.hw_entry_reset.s | 7 +- c64/kernal/init/fda3.ioinit.s | 7 +- c64/kernal/init/ff5b.cint.s | 7 +- c64/kernal/init/fffc.vector_reset.s | 8 +- c64/kernal/init/setup_pal_ntsc.s | 7 +- .../interrupts/ea31.default_irq_handler.s | 7 +- .../ea7e.ack_cia1_return_from_interrupt.s | 8 +- .../interrupts/ea81.return_from_interrupt.s | 8 +- .../interrupts/fe47.default_nmi_handler.s | 8 +- .../interrupts/fe66.default_brk_handler.s | 8 +- c64/kernal/interrupts/fffa.vector_nmi.s | 8 +- c64/kernal/interrupts/fffe.vector_irq.s | 8 +- c64/kernal/interrupts/hw_entry_irq.s | 7 +- c64/kernal/interrupts/hw_entry_nmi.s | 7 +- c64/kernal/iostack/chkinout.s | 7 +- c64/kernal/iostack/clall_real.s | 7 +- c64/kernal/iostack/f13e.getin.s | 7 +- c64/kernal/iostack/f157.chrin.s | 7 +- c64/kernal/iostack/f1ca.chrout.s | 7 +- c64/kernal/iostack/f20e.chkin.s | 7 +- c64/kernal/iostack/f250.ckout.s | 7 +- c64/kernal/iostack/f291.close.s | 7 +- c64/kernal/iostack/f32f.clall.jmp.s | 8 +- c64/kernal/iostack/f333.clrchn.s | 7 +- c64/kernal/iostack/f34a.open.s | 7 +- c64/kernal/iostack/f49e.load_prep.s | 7 +- c64/kernal/iostack/f4a5.load.s | 7 +- c64/kernal/iostack/f5dd.save_prep.s | 7 +- c64/kernal/iostack/f5ed.save.s | 7 +- c64/kernal/iostack/findfls.s | 7 +- c64/kernal/iostack/getin_real.s | 7 +- c64/kernal/iostack/load_save_common.s | 7 +- c64/kernal/iostack/readst.s | 7 +- c64/kernal/iostack/setfls.s | 7 +- c64/kernal/iostack/setmsg.s | 8 +- c64/kernal/iostack/setnam.s | 7 +- c64/kernal/iostack/settmo.s | 8 +- c64/kernal/jumptable/ff81.jcint.s | 8 +- c64/kernal/jumptable/ff84.jioinit.s | 8 +- c64/kernal/jumptable/ff87.jramtas.s | 7 +- c64/kernal/jumptable/ff8a.jrestor.s | 7 +- c64/kernal/jumptable/ff8d.jvector.s | 7 +- c64/kernal/jumptable/ff90.jsetmsg.s | 7 +- c64/kernal/jumptable/ff93.jsecond.s | 7 +- c64/kernal/jumptable/ff96.jtksa.s | 7 +- c64/kernal/jumptable/ff99.jmemtop.s | 7 +- c64/kernal/jumptable/ff9c.jmembot.s | 7 +- c64/kernal/jumptable/ff9f.jscnkey.s | 7 +- c64/kernal/jumptable/ffa2.jsettmo.s | 7 +- c64/kernal/jumptable/ffa5.jacptr.s | 7 +- c64/kernal/jumptable/ffa8.jciout.s | 7 +- c64/kernal/jumptable/ffab.juntlk.s | 7 +- c64/kernal/jumptable/ffae.junlsn.s | 7 +- c64/kernal/jumptable/ffb1.jlisten.s | 7 +- c64/kernal/jumptable/ffb4.jtalk.s | 7 +- c64/kernal/jumptable/ffb7.jreadst.s | 7 +- c64/kernal/jumptable/ffba.jsetfls.s | 7 +- c64/kernal/jumptable/ffbd.jsetnam.s | 7 +- c64/kernal/jumptable/ffc0.jopen.s | 7 +- c64/kernal/jumptable/ffc3.jclose.s | 7 +- c64/kernal/jumptable/ffc6.jchkin.s | 7 +- c64/kernal/jumptable/ffc9.jckout.s | 7 +- c64/kernal/jumptable/ffcc.jclrchn.s | 7 +- c64/kernal/jumptable/ffcf.jchrin.s | 7 +- c64/kernal/jumptable/ffd2.jchrout.s | 7 +- c64/kernal/jumptable/ffd5.jload.s | 7 +- c64/kernal/jumptable/ffd8.jsave.s | 7 +- c64/kernal/jumptable/ffdb.jsettim.s | 7 +- c64/kernal/jumptable/ffde.jrdtim.s | 7 +- c64/kernal/jumptable/ffe1.jstop.s | 7 +- c64/kernal/jumptable/ffe4.jgetin.s | 7 +- c64/kernal/jumptable/ffe7.jclall.s | 7 +- c64/kernal/jumptable/ffea.judtim.s | 7 +- c64/kernal/jumptable/ffed.jscreen.s | 7 +- c64/kernal/jumptable/fff0.jplot.s | 7 +- c64/kernal/jumptable/fff3.jiobase.s | 7 +- c64/kernal/keyboard/chrin_keyboard.s | 7 +- c64/kernal/keyboard/f142.getin_keyboard.s | 7 +- c64/kernal/keyboard/f6ed.stop.s | 7 +- c64/kernal/keyboard/kb_matrix.s | 7 +- c64/kernal/keyboard/kb_matrix_128.s | 7 +- c64/kernal/keyboard/kb_matrix_65.s | 7 +- c64/kernal/keyboard/kb_matrix_alwaysrepeat.s | 7 +- c64/kernal/keyboard/kb_matrix_bucky.s | 7 +- c64/kernal/keyboard/kb_matrix_bucky_filter.s | 7 +- c64/kernal/keyboard/kb_matrix_joy.s | 7 +- c64/kernal/keyboard/kb_matrix_lookup.s | 7 +- c64/kernal/keyboard/kb_matrix_lookup_legacy.s | 7 +- c64/kernal/keyboard/kb_matrix_row_keys.s | 7 +- c64/kernal/keyboard/kb_matrix_row_offsets.s | 7 +- c64/kernal/keyboard/keyboard_disconnect.s | 7 +- c64/kernal/keyboard/pop_keyboard_buffer.s | 7 +- c64/kernal/keyboard/programmable_keys.s | 7 +- c64/kernal/keyboard/scnkey.s | 7 +- c64/kernal/keyboard/scnkey_128.s | 7 +- c64/kernal/keyboard/scnkey_65.s | 8 +- c64/kernal/keyboard/scnkey_legacy.s | 7 +- c64/kernal/keyboard/scnkey_set_keytab.s | 7 +- c64/kernal/keyboard/udtim_keyboard.s | 7 +- c64/kernal/memory/fd15.restor.s | 7 +- c64/kernal/memory/fe25.memtop.s | 7 +- c64/kernal/memory/under_rom_routines.s | 7 +- c64/kernal/memory/vector_real.s | 7 +- c64/kernal/panic.s | 7 +- c64/kernal/print/print_features.s | 7 +- c64/kernal/print/print_hex_byte.s | 7 +- c64/kernal/print/print_kernal_message.s | 7 +- c64/kernal/print/print_pal_ntsc.s | 7 +- c64/kernal/print/print_return.s | 7 +- c64/kernal/print/print_space.s | 7 +- c64/kernal/print/printf.s | 7 +- .../rom_revision/ff80.kernal_revision.s | 7 +- c64/kernal/rs232/chkin_rs232_up2400.s | 7 +- c64/kernal/rs232/chkin_rs232_up9600.s | 8 +- c64/kernal/rs232/chrin_rs232_up2400.s | 7 +- c64/kernal/rs232/chrin_rs232_up9600.s | 7 +- c64/kernal/rs232/chrout_rs232.s | 7 +- c64/kernal/rs232/ckout_rs232_up2400.s | 7 +- c64/kernal/rs232/ckout_rs232_up9600.s | 7 +- c64/kernal/rs232/close_rs232.s | 7 +- c64/kernal/rs232/getin_rs232.s | 7 +- c64/kernal/rs232/open_rs232.s | 7 +- c64/kernal/rs232/rs232_count_channels.s | 59 ++-- c64/kernal/rs232/up9600_disable.s | 94 +++--- c64/kernal/rs232/up9600_enable.s | 269 +++++++++--------- c64/kernal/rs232/up9600_ihitab.s | 43 ++- c64/kernal/rs232/up9600_ilotab.s | 43 ++- c64/kernal/rs232/up9600_irq.s | 87 +++--- c64/kernal/rs232/up9600_nmi.s | 139 +++++---- c64/kernal/rs232/up9600_rsin.s | 93 +++--- c64/kernal/rs232/up9600_rsout.s | 119 ++++---- c64/kernal/screen/chrout_screen.s | 7 +- c64/kernal/screen/chrout_screen_clr.s | 7 +- c64/kernal/screen/chrout_screen_control.s | 7 +- c64/kernal/screen/chrout_screen_crsr.s | 7 +- c64/kernal/screen/chrout_screen_del.s | 7 +- c64/kernal/screen/chrout_screen_gfxtxt.s | 7 +- c64/kernal/screen/chrout_screen_home.s | 7 +- c64/kernal/screen/chrout_screen_ins.s | 7 +- .../screen/chrout_screen_jumptable_codes.s | 7 +- c64/kernal/screen/chrout_screen_quote.s | 7 +- c64/kernal/screen/chrout_screen_return.s | 7 +- c64/kernal/screen/chrout_screen_rvs.s | 7 +- c64/kernal/screen/chrout_screen_shift_onoff.s | 7 +- c64/kernal/screen/chrout_screen_stop.s | 7 +- c64/kernal/screen/chrout_screen_tab.s | 7 +- c64/kernal/screen/cursor.s | 7 +- c64/kernal/screen/cursor_enable.s | 8 +- c64/kernal/screen/cursor_show.s | 7 +- c64/kernal/screen/e50a.plot.s | 7 +- c64/kernal/screen/e544.clear_screen.s | 7 +- c64/kernal/screen/e566.cursor_home.s | 7 +- .../screen/e56c.screen_calculate_pointers.s | 7 +- c64/kernal/screen/e8ea.screen_scroll_up.s | 7 +- c64/kernal/screen/e9ff.screen_clear_line.s | 7 +- c64/kernal/screen/screen.s | 6 +- .../screen/screen_advance_to_next_line.s | 7 +- c64/kernal/screen/screen_calculate_pnt_user.s | 7 +- .../screen/screen_calculate_pntr_lnmx.s | 7 +- .../screen/screen_check_space_ends_line.s | 7 +- c64/kernal/screen/screen_code_to_petscii.s | 7 +- c64/kernal/screen/screen_get_cliped_pntr.s | 7 +- .../screen/screen_get_logical_line_end_ptr.s | 7 +- c64/kernal/screen/screen_grow_logical_line.s | 7 +- c64/kernal/screen/screen_off.s | 7 +- c64/kernal/screen/screen_on.s | 7 +- c64/kernal/screen/screen_preserve_sal_eal.s | 7 +- c64/kernal/screen/screen_restore_sal_eal.s | 7 +- c64/kernal/tape/load_tape_normal.s | 7 +- c64/kernal/tape/load_tape_turbo.s | 7 +- c64/kernal/tape/tape_common.s | 7 +- c64/kernal/tape/tape_common_clean_sid.s | 7 +- c64/kernal/tape/tape_common_ditch_verify.s | 7 +- c64/kernal/tape/tape_common_motor.s | 7 +- c64/kernal/tape/tape_common_prepare_cia.s | 7 +- c64/kernal/tape/tape_common_screen.s | 7 +- c64/kernal/tape/tape_normal_get_bit.s | 7 +- c64/kernal/tape/tape_normal_get_byte.s | 7 +- c64/kernal/tape/tape_normal_get_data.s | 7 +- c64/kernal/tape/tape_normal_get_marker.s | 8 +- c64/kernal/tape/tape_normal_get_pulse.s | 8 +- c64/kernal/tape/tape_normal_pilot.s | 8 +- c64/kernal/tape/tape_normal_sync.s | 7 +- c64/kernal/tape/tape_turbo_bytestore.s | 7 +- c64/kernal/tape/tape_turbo_get_bit.s | 7 +- c64/kernal/tape/tape_turbo_get_byte.s | 7 +- c64/kernal/tape/tape_turbo_sync.s | 7 +- c64/kernal/tape/tape_turbo_sync_first.s | 7 +- c64/kernal/tape/tape_turbo_sync_measure.s | 7 +- c64/kernal/time/rdtim.s | 7 +- c64/kernal/time/settim.s | 7 +- c64/kernal/time/udtim.s | 7 +- src/build_segment.cc | 5 +- 326 files changed, 1553 insertions(+), 1840 deletions(-) diff --git a/c64/basic/,stubs/a408.reason.s b/c64/basic/,stubs/a408.reason.s index cc75fcb8..8bca5016 100644 --- a/c64/basic/,stubs/a408.reason.s +++ b/c64/basic/,stubs/a408.reason.s @@ -1,9 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + // XXX provide documentation and implementation REASON: STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/basic/,stubs/a453.unknown.s b/c64/basic/,stubs/a453.unknown.s index 1aef3f04..02ae9dac 100644 --- a/c64/basic/,stubs/a453.unknown.s +++ b/c64/basic/,stubs/a453.unknown.s @@ -1,8 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + // XXX provide documentation and implementation STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/basic/,stubs/a57c.chrnch.s b/c64/basic/,stubs/a57c.chrnch.s index 61e459bb..b5e3df12 100644 --- a/c64/basic/,stubs/a57c.chrnch.s +++ b/c64/basic/,stubs/a57c.chrnch.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official BASIC routine, described in: @@ -12,6 +14,3 @@ CHRNCH: STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/basic/,stubs/a644.new.s b/c64/basic/,stubs/a644.new.s index 0e99bcdb..73c8df60 100644 --- a/c64/basic/,stubs/a644.new.s +++ b/c64/basic/,stubs/a644.new.s @@ -1,9 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + // XXX provide documentation and real implementation new: STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/basic/,stubs/a659.setcharptr.s b/c64/basic/,stubs/a659.setcharptr.s index d0c6dc75..64a573a3 100644 --- a/c64/basic/,stubs/a659.setcharptr.s +++ b/c64/basic/,stubs/a659.setcharptr.s @@ -1,4 +1,7 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + // XXX provide documentation and implementation // see: https://www.lemon64.com/forum/viewtopic.php?t=64721&sid=bc400a5a6d404f8f092e4d32a92f5de7 @@ -6,6 +9,3 @@ setcharptr: STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/basic/,stubs/a71a.qplop.s b/c64/basic/,stubs/a71a.qplop.s index 6613fc99..921a807a 100644 --- a/c64/basic/,stubs/a71a.qplop.s +++ b/c64/basic/,stubs/a71a.qplop.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official BASIC routine, described in: @@ -12,6 +14,3 @@ QPLOP: STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/basic/,stubs/a7e4.gone.s b/c64/basic/,stubs/a7e4.gone.s index 9d598298..bfbc4435 100644 --- a/c64/basic/,stubs/a7e4.gone.s +++ b/c64/basic/,stubs/a7e4.gone.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official BASIC routine, described in: @@ -12,6 +14,3 @@ GONE: STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/basic/,stubs/ad9e.frmevl.s b/c64/basic/,stubs/ad9e.frmevl.s index a63ec8b2..2a246f66 100644 --- a/c64/basic/,stubs/ad9e.frmevl.s +++ b/c64/basic/,stubs/ad9e.frmevl.s @@ -1,9 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + // XXX provide documentation and implementation FRMEVL: STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/basic/,stubs/ae86.eval.s b/c64/basic/,stubs/ae86.eval.s index b2bf858d..b8e06255 100644 --- a/c64/basic/,stubs/ae86.eval.s +++ b/c64/basic/,stubs/ae86.eval.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official BASIC routine, described in: @@ -12,6 +14,3 @@ EVAL: STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/basic/,stubs/e38b.error.s b/c64/basic/,stubs/e38b.error.s index 4d270eba..e057f13a 100644 --- a/c64/basic/,stubs/e38b.error.s +++ b/c64/basic/,stubs/e38b.error.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official BASIC routine, described in: @@ -12,6 +14,3 @@ ERROR: STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/basic/,stubs/e3bf.init.s b/c64/basic/,stubs/e3bf.init.s index 9c63859d..25cf67c0 100644 --- a/c64/basic/,stubs/e3bf.init.s +++ b/c64/basic/,stubs/e3bf.init.s @@ -1,9 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + // XXX provide documentation and implementation INIT: STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/basic/,stubs/e453.rvect.s b/c64/basic/,stubs/e453.rvect.s index cc58e236..b8322901 100644 --- a/c64/basic/,stubs/e453.rvect.s +++ b/c64/basic/,stubs/e453.rvect.s @@ -1,9 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + // XXX provide documentation and implementation RVECT: STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/basic/a533.linkprg.s b/c64/basic/a533.linkprg.s index fabfd806..4db59db1 100644 --- a/c64/basic/a533.linkprg.s +++ b/c64/basic/a533.linkprg.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // // Well-known BASIC routine, described in: @@ -90,6 +92,3 @@ linkprg_end_of_line_search: sta OLDTXT+0 jmp linkprg_loop - - -#endif // ROM layout diff --git a/c64/basic/a68e.runc.s b/c64/basic/a68e.runc.s index 13fe9092..f0a8aeb1 100644 --- a/c64/basic/a68e.runc.s +++ b/c64/basic/a68e.runc.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // Well-known BASIC routine, described in: // @@ -26,6 +28,3 @@ RUNC: sta TXTPTR+1 rts - - -#endif // ROM layout diff --git a/c64/basic/a7ae.newstt.s b/c64/basic/a7ae.newstt.s index 152e22ab..79aed4d6 100644 --- a/c64/basic/a7ae.newstt.s +++ b/c64/basic/a7ae.newstt.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // Well-known BASIC routine, described in: // @@ -17,6 +19,3 @@ NEWSTT: // For now, lets cheat a little - this should provide some compatibility: jmp cmd_run - - -#endif // ROM layout diff --git a/c64/basic/ab1e.strout.s b/c64/basic/ab1e.strout.s index 01da716d..0317550a 100644 --- a/c64/basic/ab1e.strout.s +++ b/c64/basic/ab1e.strout.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // Print string at $YYAA // Computes Mapping the 64 p101 @@ -33,6 +35,3 @@ STROUT: pla // XXX can we use plx_trash_a here? tax rts - - -#endif // ROM layout diff --git a/c64/basic/basic_adray1.s b/c64/basic/basic_adray1.s index c23e0256..201195a2 100644 --- a/c64/basic/basic_adray1.s +++ b/c64/basic/basic_adray1.s @@ -1,9 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + // XXX provide documentation and implementation basic_adray1: STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/basic/basic_adray2.s b/c64/basic/basic_adray2.s index 32bfc72f..afb58e61 100644 --- a/c64/basic/basic_adray2.s +++ b/c64/basic/basic_adray2.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // XXX provide documentation and implementation basic_adray2: STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/basic/basic_delete_line.s b/c64/basic/basic_delete_line.s index 2da34969..d7491d1d 100644 --- a/c64/basic/basic_delete_line.s +++ b/c64/basic/basic_delete_line.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // Delete the current BASIC line, which is assumed to have already // been found with basic_find_line. @@ -82,6 +84,3 @@ basic_delete_line: clc rts - - -#endif // ROM layout diff --git a/c64/basic/basic_do_error.s b/c64/basic/basic_do_error.s index e3ef4bec..084a8bea 100644 --- a/c64/basic/basic_do_error.s +++ b/c64/basic/basic_do_error.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // Computes Mapping the 64 p93 @@ -31,6 +33,3 @@ basic_do_error: ldx #$FE txs jmp basic_main_loop - - -#endif // ROM layout diff --git a/c64/basic/basic_execute_line.s b/c64/basic/basic_execute_line.s index 81064f46..9268327a 100644 --- a/c64/basic/basic_execute_line.s +++ b/c64/basic/basic_execute_line.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // Jump back into the BASIC execute line loop // after first checking that we have a colon @@ -367,6 +369,3 @@ basic_command_jump_table: .word cmd_unimplemented-1 .word cmd_unimplemented-1 .word cmd_unimplemented-1 - - -#endif // ROM layout diff --git a/c64/basic/basic_find_line.s b/c64/basic/basic_find_line.s index cc35e1bb..45102507 100644 --- a/c64/basic/basic_find_line.s +++ b/c64/basic/basic_find_line.s @@ -1,4 +1,7 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + // Find the BASIC line with number LINNUM @@ -81,6 +84,3 @@ more_lines_exist: sta OLDTXT+0 jmp basic_find_line_loop - - -#endif // ROM layout diff --git a/c64/basic/basic_find_next_line.s b/c64/basic/basic_find_next_line.s index fc2f5b97..6c2cba88 100644 --- a/c64/basic/basic_find_next_line.s +++ b/c64/basic/basic_find_next_line.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // Advance OLDTXT by following the // link to the next line @@ -27,6 +29,3 @@ basic_find_next_line: pla sta OLDTXT+0 rts - - -#endif // ROM layout diff --git a/c64/basic/basic_follow_link_to_next_line.s b/c64/basic/basic_follow_link_to_next_line.s index 5b32eae9..5a4acd2c 100644 --- a/c64/basic/basic_follow_link_to_next_line.s +++ b/c64/basic/basic_follow_link_to_next_line.s @@ -1,5 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) - +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE basic_follow_link_to_next_line: ldy #0 @@ -24,6 +25,3 @@ basic_follow_link_to_next_line: pla sta OLDTXT+0 rts - - -#endif // ROM layout diff --git a/c64/basic/basic_insert_line.s b/c64/basic/basic_insert_line.s index 9eb95955..25212e01 100644 --- a/c64/basic/basic_insert_line.s +++ b/c64/basic/basic_insert_line.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // Insert the tokenised line stored at $0200. // First work out where in the list to put it @@ -100,6 +102,3 @@ line_store_loop: clc rts - - -#endif // ROM layout diff --git a/c64/basic/basic_main_loop.s b/c64/basic/basic_main_loop.s index af6fa6d3..8e880687 100644 --- a/c64/basic/basic_main_loop.s +++ b/c64/basic/basic_main_loop.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE basic_main_loop: @@ -176,6 +178,3 @@ not_a_line: sta CURLIN+1 jmp basic_execute_statement - - -#endif // ROM layout diff --git a/c64/basic/basic_parse_line_number.s b/c64/basic/basic_parse_line_number.s index 3e1ae801..3e8b8ce7 100644 --- a/c64/basic/basic_parse_line_number.s +++ b/c64/basic/basic_parse_line_number.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE basic_parse_line_number: @@ -27,6 +29,3 @@ ml_bad_line_number: sta LINNUM+1 clc rts - - -#endif // ROM layout diff --git a/c64/basic/basic_shift_mem_down.s b/c64/basic/basic_shift_mem_down.s index 2daa4fa2..0ab14abd 100644 --- a/c64/basic/basic_shift_mem_down.s +++ b/c64/basic/basic_shift_mem_down.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE basic_shift_mem_down_and_relink: @@ -171,6 +173,3 @@ relink_down_loop: clc rts - - -#endif // ROM layout diff --git a/c64/basic/basic_shift_mem_up.s b/c64/basic/basic_shift_mem_up.s index 763582f2..3ff1eb07 100644 --- a/c64/basic/basic_shift_mem_up.s +++ b/c64/basic/basic_shift_mem_up.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE basic_shift_mem_up_and_relink: @@ -203,6 +205,3 @@ relink_up_loop: bcs relink_up_next_line rts - - -#endif // ROM layout diff --git a/c64/basic/basic_vector_defaults.s b/c64/basic/basic_vector_defaults.s index 6646b345..9e7ebb73 100644 --- a/c64/basic/basic_vector_defaults.s +++ b/c64/basic/basic_vector_defaults.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // // Default values for BASIC vectors - described in: @@ -20,6 +22,3 @@ basic_vector_defaults_2: .word basic_adray1 // ADRAY1 .word basic_adray2 // ADRAY2 - - -#endif // ROM layout diff --git a/c64/basic/bdcd.linprt.s b/c64/basic/bdcd.linprt.s index 1f104e3b..284b626e 100644 --- a/c64/basic/bdcd.linprt.s +++ b/c64/basic/bdcd.linprt.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // // Well-known BASIC routine, described in: @@ -11,6 +13,3 @@ LINPRT: // XXX This is temporary, to allow some software to work! // To be replaced by real impleementation. jmp print_integer - - -#endif // ROM layout diff --git a/c64/basic/c000.skip_gap.s b/c64/basic/c000.skip_gap.s index 5d45cdcf..9d256aeb 100644 --- a/c64/basic/c000.skip_gap.s +++ b/c64/basic/c000.skip_gap.s @@ -1,8 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + // Skip the gap between $C000-$DFFF .fill $2000, $00 - - -#endif // ROM layout diff --git a/c64/basic/commands/cmd_break.s b/c64/basic/commands/cmd_break.s index 17673e7d..ee1a5768 100644 --- a/c64/basic/commands/cmd_break.s +++ b/c64/basic/commands/cmd_break.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE cmd_stop: @@ -23,6 +25,3 @@ cmd_stop: cmd_end: jmp basic_main_loop - - -#endif // ROM layout diff --git a/c64/basic/commands/cmd_list.s b/c64/basic/commands/cmd_list.s index ef3822cf..973ebc89 100644 --- a/c64/basic/commands/cmd_list.s +++ b/c64/basic/commands/cmd_list.s @@ -1,4 +1,7 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + // LIST basic text. // XXX - Does not currently support line number ranges @@ -147,6 +150,3 @@ list_is_literal: list_end_of_line: // Print end of line jmp print_return - - -#endif // ROM layout diff --git a/c64/basic/commands/cmd_load.s b/c64/basic/commands/cmd_load.s index 70cb30df..17f1fee7 100644 --- a/c64/basic/commands/cmd_load.s +++ b/c64/basic/commands/cmd_load.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE cmd_load: @@ -129,6 +131,3 @@ load_no_error: // XXX - should run program if LOAD was used in program mode jmp basic_main_loop - - -#endif // ROM layout diff --git a/c64/basic/commands/cmd_new.s b/c64/basic/commands/cmd_new.s index f4ddf91b..fc455a77 100644 --- a/c64/basic/commands/cmd_new.s +++ b/c64/basic/commands/cmd_new.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE cmd_new: @@ -80,6 +82,3 @@ basic_do_clr: sta STREND+1 rts - - -#endif // ROM layout diff --git a/c64/basic/commands/cmd_rem.s b/c64/basic/commands/cmd_rem.s index 4d6daaa9..c8b9b021 100644 --- a/c64/basic/commands/cmd_rem.s +++ b/c64/basic/commands/cmd_rem.s @@ -1,9 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + // REM statement just skips to the next line cmd_rem: jmp basic_end_of_line - - -#endif // ROM layout diff --git a/c64/basic/commands/cmd_run.s b/c64/basic/commands/cmd_run.s index 310a4d34..e37f7854 100644 --- a/c64/basic/commands/cmd_run.s +++ b/c64/basic/commands/cmd_run.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE cmd_run: @@ -23,6 +25,3 @@ cmd_goto: !: // Run it! jmp basic_execute_from_current_line - - -#endif // ROM layout diff --git a/c64/basic/commands/cmd_sys.s b/c64/basic/commands/cmd_sys.s index b4953c7b..2278aafc 100644 --- a/c64/basic/commands/cmd_sys.s +++ b/c64/basic/commands/cmd_sys.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE cmd_sys: @@ -69,6 +71,3 @@ cmd_sys_setup_call: cmd_sys_hack_str: .byte $FF, $AC, $36, $35, $36, $00 - - -#endif // ROM layout diff --git a/c64/basic/commands/cmd_unimplemented.s b/c64/basic/commands/cmd_unimplemented.s index 0252f1ef..59407688 100644 --- a/c64/basic/commands/cmd_unimplemented.s +++ b/c64/basic/commands/cmd_unimplemented.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // // Default handler for all not-yet-implemented commands @@ -156,6 +158,3 @@ cmd_go: cmd_unimplemented: jmp do_NOT_IMPLEMENTED_error - - -#endif // ROM layout diff --git a/c64/basic/do_basic_error.s b/c64/basic/do_basic_error.s index 1e388470..6bf58362 100644 --- a/c64/basic/do_basic_error.s +++ b/c64/basic/do_basic_error.s @@ -1,6 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE -// As many errors are triggered from many places in the BASIC +// As many errors are triggered from many places in the BASIC // interprettor, it is important to have an efficicent means of // calling them. // LDX #$nn / jmp do_basic_error @@ -167,6 +169,3 @@ do_basic_error: // XXX - Restore stack depth first? jmp basic_main_loop - - -#endif // ROM layout diff --git a/c64/basic/fac1_mul.s b/c64/basic/fac1_mul.s index cd14ce64..b69f9714 100644 --- a/c64/basic/fac1_mul.s +++ b/c64/basic/fac1_mul.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // Multiply Floating Point Accumulator by 10 // = 8x + 2x @@ -97,6 +99,3 @@ f1md2_l1: dey bpl f1md2_l1 rts - - -#endif // ROM layout diff --git a/c64/basic/init/a000.cold_start_vector.s b/c64/basic/init/a000.cold_start_vector.s index 7a02167a..067b0f64 100644 --- a/c64/basic/init/a000.cold_start_vector.s +++ b/c64/basic/init/a000.cold_start_vector.s @@ -1,8 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + // Computes Mapping the C64 p88 .word basic_cold_start - - -#endif // ROM layout diff --git a/c64/basic/init/a002.warm_start_vector.s b/c64/basic/init/a002.warm_start_vector.s index f909e6b7..411e17a5 100644 --- a/c64/basic/init/a002.warm_start_vector.s +++ b/c64/basic/init/a002.warm_start_vector.s @@ -1,8 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + // Computes Mapping the C64 p88 .word basic_warm_start - - -#endif // ROM layout diff --git a/c64/basic/init/basic_cold_start_internal.s b/c64/basic/init/basic_cold_start_internal.s index 01e4ea6a..e321d9e7 100644 --- a/c64/basic/init/basic_cold_start_internal.s +++ b/c64/basic/init/basic_cold_start_internal.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // // Continuation of the BASIC cold start routine @@ -41,6 +43,3 @@ basic_cold_start_internal: // jump into warm start loop jmp basic_warm_start - - -#endif // ROM layout diff --git a/c64/basic/init/basic_warm_start_internal.s b/c64/basic/init/basic_warm_start_internal.s index be115d9e..f9ad47c0 100644 --- a/c64/basic/init/basic_warm_start_internal.s +++ b/c64/basic/init/basic_warm_start_internal.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // // Continuation of the BASIC cold start routine @@ -28,6 +30,3 @@ basic_warm_start_real: !: jmp basic_main_loop - - -#endif // ROM layout diff --git a/c64/basic/init/e394.basic_cold_start.s b/c64/basic/init/e394.basic_cold_start.s index 8f59919f..76419f1c 100644 --- a/c64/basic/init/e394.basic_cold_start.s +++ b/c64/basic/init/e394.basic_cold_start.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // BASIC Cold start entry point @@ -23,6 +25,3 @@ basic_cold_start: // Remaining part would not fit here jmp basic_cold_start_internal - - -#endif // ROM layout diff --git a/c64/basic/init/e3b7.basic_warm_start.jmp.s b/c64/basic/init/e3b7.basic_warm_start.jmp.s index 0e1f0031..144ba4b6 100644 --- a/c64/basic/init/e3b7.basic_warm_start.jmp.s +++ b/c64/basic/init/e3b7.basic_warm_start.jmp.s @@ -1,10 +1,10 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + // Clear screen etc, show READY prompt. basic_warm_start: jmp basic_warm_start_real - - -#endif // ROM layout diff --git a/c64/basic/init/e422.initmsg.jmp.s b/c64/basic/init/e422.initmsg.jmp.s index cdbac7ea..9d69690f 100644 --- a/c64/basic/init/e422.initmsg.jmp.s +++ b/c64/basic/init/e422.initmsg.jmp.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // // Well-known BASIC routine, described in: @@ -10,6 +12,3 @@ INITMSG: jmp initmsg_real - - -#endif // ROM layout diff --git a/c64/basic/init/initmsg_bytes_free.s b/c64/basic/init/initmsg_bytes_free.s index 03ac32ce..ee2c4fa5 100644 --- a/c64/basic/init/initmsg_bytes_free.s +++ b/c64/basic/init/initmsg_bytes_free.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // // Print out the amount of free bytes - for the startup banner @@ -20,6 +22,3 @@ initmsg_bytes_free: // Print rest of the start up message ldx #34 jmp print_packed_message - - -#endif // ROM layout diff --git a/c64/basic/init/initmsg_real.s b/c64/basic/init/initmsg_real.s index 107ce04e..15ca951c 100644 --- a/c64/basic/init/initmsg_real.s +++ b/c64/basic/init/initmsg_real.s @@ -1,4 +1,7 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + // Routine is too long to fit in the original location @@ -151,6 +154,3 @@ initmsg_real: #endif - - -#endif // ROM layout diff --git a/c64/basic/init/startup_banner.s b/c64/basic/init/startup_banner.s index 21955b67..faedc2c3 100644 --- a/c64/basic/init/startup_banner.s +++ b/c64/basic/init/startup_banner.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // // Startup banner, to be displayed during cold start @@ -111,6 +113,3 @@ pre_revision_string: // .byte $0D,$05,$92,$00 #endif - - -#endif // ROM layout diff --git a/c64/basic/init_oldtxt.s b/c64/basic/init_oldtxt.s index a4e42014..9879e463 100644 --- a/c64/basic/init_oldtxt.s +++ b/c64/basic/init_oldtxt.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE init_oldtxt: @@ -9,6 +11,3 @@ init_oldtxt: sta OLDTXT+1 rts - - -#endif // ROM layout diff --git a/c64/basic/injest_comma.s b/c64/basic/injest_comma.s index b890fd92..2e59ead9 100644 --- a/c64/basic/injest_comma.s +++ b/c64/basic/injest_comma.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // Consummes a comma in a BASIC code, C set for no coma found @@ -19,6 +21,3 @@ injest_comma: injest_comma_found: clc rts - - -#endif // ROM layout diff --git a/c64/basic/injest_number.s b/c64/basic/injest_number.s index 14c97fe2..8fef2c70 100644 --- a/c64/basic/injest_number.s +++ b/c64/basic/injest_number.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // Parse a number from the input buffer at (TXTPTR) @@ -152,6 +154,3 @@ erase_fac1: sta FACOV rts - - -#endif // ROM layout diff --git a/c64/basic/pack_word.s b/c64/basic/pack_word.s index 0157b13b..5b8e502e 100644 --- a/c64/basic/pack_word.s +++ b/c64/basic/pack_word.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // Pack a word using the simple compression scheme. // This has to be the same implementation as in compress_text.c @@ -255,6 +257,3 @@ not_a_match: // Not a char that we can pack, so return 0 lda #$00 rts - - -#endif // ROM layout diff --git a/c64/basic/peek_line_pointer_null_check.s b/c64/basic/peek_line_pointer_null_check.s index a35509ac..d3368be5 100644 --- a/c64/basic/peek_line_pointer_null_check.s +++ b/c64/basic/peek_line_pointer_null_check.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // Return C=1 if a pointer in BASIC memory space is NULL, else C=0 // X = ZP pointer to check @@ -34,6 +36,3 @@ peek_line_pointer_null_check: ptr_not_null: sec rts - - -#endif // ROM layout diff --git a/c64/basic/print_integer.s b/c64/basic/print_integer.s index a0aed8fc..72c0f68a 100644 --- a/c64/basic/print_integer.s +++ b/c64/basic/print_integer.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // Works similar to $BDCD in original C64 BASIC // XXX Should eventually get replaced by a more flexible and optimal routine. @@ -144,6 +146,3 @@ number_table_hi: .byte 0,8,1,9,2 .byte 1,6,3,8,4 .byte 3,2,7,6,8 - - -#endif // ROM layout diff --git a/c64/basic/print_packed_message.s b/c64/basic/print_packed_message.s index 71e162da..8aba8b25 100644 --- a/c64/basic/print_packed_message.s +++ b/c64/basic/print_packed_message.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // This routine prints messages that have been packed // using the make_error_tables program. @@ -228,6 +230,3 @@ is_uncommon_char: phy_trash_a jmp has_nybl - - -#endif // ROM layout diff --git a/c64/basic/ready_message.s b/c64/basic/ready_message.s index 95dbc00f..791cb7eb 100644 --- a/c64/basic/ready_message.s +++ b/c64/basic/ready_message.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE ready_message: @@ -6,6 +8,3 @@ ready_message: // information. ldx #29 jmp print_packed_message - - -#endif // ROM layout diff --git a/c64/basic/rom_revision/a004.identifier.s b/c64/basic/rom_revision/a004.identifier.s index 241d37c6..2edea486 100644 --- a/c64/basic/rom_revision/a004.identifier.s +++ b/c64/basic/rom_revision/a004.identifier.s @@ -1,10 +1,10 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + // Computes Mapping the 64, p89 // 8 character name // MEGABAS2 = "MEGA BASIC 2" .byte $4D,$45,$47,$41,$42,$41,$53,$32 - - -#endif // ROM layout diff --git a/c64/basic/rom_revision/bf52.rom_revision_basic.s b/c64/basic/rom_revision/bf52.rom_revision_basic.s index 1a1d89bb..91438dac 100644 --- a/c64/basic/rom_revision/bf52.rom_revision_basic.s +++ b/c64/basic/rom_revision/bf52.rom_revision_basic.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // // !!! PROPOSAL ONLY !!! PROPOSAL ONLY !!! NOT FOR USING EXTERNALLY YET !!! @@ -31,6 +33,3 @@ rom_revision_basic_string: .byte $00 // marks the end of string __rom_revision_basic_end: - - -#endif // ROM layout diff --git a/c64/basic/rom_revision/e4b7.rom_revision_kernal.s b/c64/basic/rom_revision/e4b7.rom_revision_kernal.s index bb11b2f2..e9254347 100644 --- a/c64/basic/rom_revision/e4b7.rom_revision_kernal.s +++ b/c64/basic/rom_revision/e4b7.rom_revision_kernal.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // // !!! PROPOSAL ONLY !!! PROPOSAL ONLY !!! NOT FOR USING EXTERNALLY YET !!! @@ -45,6 +47,3 @@ rom_revision_kernal_string: .byte $00 // marks the end of string __rom_revision_kernal_end: - - -#endif // ROM layout diff --git a/c64/basic/select_device.s b/c64/basic/select_device.s index 408397b2..ba23425d 100644 --- a/c64/basic/select_device.s +++ b/c64/basic/select_device.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE select_device: @@ -17,6 +19,3 @@ select_device: ldx #$08 !: rts - - -#endif // ROM layout diff --git a/c64/basic/tokenise_line.s b/c64/basic/tokenise_line.s index 54405d93..0c54eed7 100644 --- a/c64/basic/tokenise_line.s +++ b/c64/basic/tokenise_line.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // Tokenise a line of BASIC // Stored at $0200 @@ -268,6 +270,3 @@ done_searching_for_token: sec lda #$00 rts - - -#endif // ROM layout diff --git a/c64/basic/under_rom_routines.s b/c64/basic/under_rom_routines.s index e4f80525..611b7e65 100644 --- a/c64/basic/under_rom_routines.s +++ b/c64/basic/under_rom_routines.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE // IMPORTANT: // These routines lengths cannot be changed without changing @@ -154,6 +156,3 @@ smd1: rts #endif - - -#endif // ROM layout diff --git a/c64/basic/wedge_dos.s b/c64/basic/wedge_dos.s index 68e50117..7b7db2a6 100644 --- a/c64/basic/wedge_dos.s +++ b/c64/basic/wedge_dos.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE #if CONFIG_DOS_WEDGE @@ -258,6 +260,3 @@ wedge_dos_setnam: jmp JSETNAM #endif // CONFIG_DOS_WEDGE - - -#endif // ROM layout diff --git a/c64/basic/wedge_tape.s b/c64/basic/wedge_tape.s index 1503f3c4..ffc41f27 100644 --- a/c64/basic/wedge_tape.s +++ b/c64/basic/wedge_tape.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_BASIC_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE #if CONFIG_TAPE_WEDGE @@ -34,6 +36,3 @@ wedge_tape: #endif // CONFIG_TAPE_WEDGE - - -#endif // ROM layout diff --git a/c64/kernal/,disabled/u64_load.s b/c64/kernal/,disabled/u64_load.s index 2bdc4d73..6d1d916a 100644 --- a/c64/kernal/,disabled/u64_load.s +++ b/c64/kernal/,disabled/u64_load.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // LOAD routine hook for fast loading via UltiDOS @@ -130,6 +132,3 @@ u64_load_check_status_ok: jmp !- !: rts - - -#endif // ROM layout diff --git a/c64/kernal/,stubs/e6b6.advance_cursor.s b/c64/kernal/,stubs/e6b6.advance_cursor.s index b9a279ba..22378e62 100644 --- a/c64/kernal/,stubs/e6b6.advance_cursor.s +++ b/c64/kernal/,stubs/e6b6.advance_cursor.s @@ -1,8 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + // XXX provide documentation and implementation STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/kernal/,stubs/e701.previous_line.s b/c64/kernal/,stubs/e701.previous_line.s index b9a279ba..22378e62 100644 --- a/c64/kernal/,stubs/e701.previous_line.s +++ b/c64/kernal/,stubs/e701.previous_line.s @@ -1,8 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + // XXX provide documentation and implementation STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/kernal/,stubs/e716.chrout_screen.s b/c64/kernal/,stubs/e716.chrout_screen.s index 009d09d4..98e607bb 100644 --- a/c64/kernal/,stubs/e716.chrout_screen.s +++ b/c64/kernal/,stubs/e716.chrout_screen.s @@ -1,8 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + // Screen CHROUT STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/kernal/,stubs/e96c.insert_line_at_top.s b/c64/kernal/,stubs/e96c.insert_line_at_top.s index 2a42c3c1..bdb40c9d 100644 --- a/c64/kernal/,stubs/e96c.insert_line_at_top.s +++ b/c64/kernal/,stubs/e96c.insert_line_at_top.s @@ -1,8 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + // Insert line at top of screen STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/kernal/,stubs/f3f6.unknown.s b/c64/kernal/,stubs/f3f6.unknown.s index b9a279ba..22378e62 100644 --- a/c64/kernal/,stubs/f3f6.unknown.s +++ b/c64/kernal/,stubs/f3f6.unknown.s @@ -1,8 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + // XXX provide documentation and implementation STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/kernal/,stubs/f646.iec_close.s b/c64/kernal/,stubs/f646.iec_close.s index 7b4f1ba9..5bd31cbd 100644 --- a/c64/kernal/,stubs/f646.iec_close.s +++ b/c64/kernal/,stubs/f646.iec_close.s @@ -1,8 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + // IEC close STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/kernal/,stubs/fd90.unknown.s b/c64/kernal/,stubs/fd90.unknown.s index b9a279ba..22378e62 100644 --- a/c64/kernal/,stubs/fd90.unknown.s +++ b/c64/kernal/,stubs/fd90.unknown.s @@ -1,8 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + // XXX provide documentation and implementation STUB_IMPLEMENTATION() - - -#endif // ROM layout diff --git a/c64/kernal/errors.s b/c64/kernal/errors.s index fc8c137a..91a85fe0 100644 --- a/c64/kernal/errors.s +++ b/c64/kernal/errors.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Kernal error codes are described in 'Commodore 64 Programmers Reference Guide', page 306 @@ -91,6 +93,3 @@ kernalstatus_DEVICE_NOT_FOUND: ora #K_STS_DEVICE_NOT_FOUND sta IOSTATUS rts - - -#endif // ROM layout diff --git a/c64/kernal/iec/acptr.s b/c64/kernal/iec/acptr.s index 98d44570..4739e5db 100644 --- a/c64/kernal/iec/acptr.s +++ b/c64/kernal/iec/acptr.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -29,6 +31,3 @@ ACPTR: #else jmp kernalerror_ILLEGAL_DEVICE_NUMBER #endif - - -#endif // ROM layout diff --git a/c64/kernal/iec/chkin_iec.s b/c64/kernal/iec/chkin_iec.s index f2f094dc..c63e424a 100644 --- a/c64/kernal/iec/chkin_iec.s +++ b/c64/kernal/iec/chkin_iec.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // IEC part of the CHKIN routine @@ -30,6 +32,3 @@ chkin_iec: jmp chkin_set_device #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/chrin_iec.s b/c64/kernal/iec/chrin_iec.s index 8c216097..2154cb5a 100644 --- a/c64/kernal/iec/chrin_iec.s +++ b/c64/kernal/iec/chrin_iec.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // IEC part of the CHRIN routine @@ -9,6 +11,3 @@ chrin_iec: // XXX is this really all? jmp JACPTR - - -#endif // ROM layout diff --git a/c64/kernal/iec/chrout_iec.s b/c64/kernal/iec/chrout_iec.s index c40b1804..d8c41ab5 100644 --- a/c64/kernal/iec/chrout_iec.s +++ b/c64/kernal/iec/chrout_iec.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // IEC part of the CHROUT routine @@ -11,6 +13,3 @@ chrout_iec: jsr JCIOUT bcc_16 chrout_done_success jmp chrout_done_fail - - -#endif // ROM layout diff --git a/c64/kernal/iec/ciout.s b/c64/kernal/iec/ciout.s index 3edcf734..6a35c029 100644 --- a/c64/kernal/iec/ciout.s +++ b/c64/kernal/iec/ciout.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -48,6 +50,3 @@ ciout_send_byte: rts #endif - - -#endif // ROM layout diff --git a/c64/kernal/iec/ckout_iec.s b/c64/kernal/iec/ckout_iec.s index 389ee058..dcbd4aa3 100644 --- a/c64/kernal/iec/ckout_iec.s +++ b/c64/kernal/iec/ckout_iec.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // IEC part of the CKOUT routine @@ -30,6 +32,3 @@ ckout_iec: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/close_iec.s b/c64/kernal/iec/close_iec.s index c2a16c12..d4ef88ac 100644 --- a/c64/kernal/iec/close_iec.s +++ b/c64/kernal/iec/close_iec.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // IEC part of the CLOSE routine @@ -34,6 +36,3 @@ close_iec_end: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/clrchn_iec.s b/c64/kernal/iec/clrchn_iec.s index 85801050..263f924f 100644 --- a/c64/kernal/iec/clrchn_iec.s +++ b/c64/kernal/iec/clrchn_iec.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // IEC part of the CLRCHN routine @@ -29,6 +31,3 @@ clrchn_iec: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_check_devnum.s b/c64/kernal/iec/iec_check_devnum.s index c4b9beb2..8dd5de91 100644 --- a/c64/kernal/iec/iec_check_devnum.s +++ b/c64/kernal/iec/iec_check_devnum.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Checks whether device number (in .A) is a correct IEC device number @@ -32,6 +34,3 @@ iec_check_devnum_failed: rts #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_close_load.s b/c64/kernal/iec/iec_close_load.s index aba2fa33..4c088b8f 100644 --- a/c64/kernal/iec/iec_close_load.s +++ b/c64/kernal/iec/iec_close_load.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Common part of CLOSE and LOAD/SAVE routines for IEC @@ -30,6 +32,3 @@ iec_close_load: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_cmd_close.s b/c64/kernal/iec/iec_cmd_close.s index 3a18f4cf..095e2000 100644 --- a/c64/kernal/iec/iec_cmd_close.s +++ b/c64/kernal/iec/iec_cmd_close.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Kernal internal IEC routine @@ -22,6 +24,3 @@ iec_cmd_close: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_cmd_open.s b/c64/kernal/iec/iec_cmd_open.s index 5630fa24..6d1bba33 100644 --- a/c64/kernal/iec/iec_cmd_open.s +++ b/c64/kernal/iec/iec_cmd_open.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Kernal internal IEC routine @@ -67,6 +69,3 @@ iec_check_channel_openclose: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_pull_release.s b/c64/kernal/iec/iec_pull_release.s index 2924ce36..d6fb93e0 100644 --- a/c64/kernal/iec/iec_pull_release.s +++ b/c64/kernal/iec/iec_pull_release.s @@ -1,89 +1,88 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) - -// -// Helper IEC routines to pull/release certain lines -// -// Order of operation is set for extra robustness, on non-emulated hardware -// lines might need few cycles to stabilize (released CLK = DATA considered valid), -// see page 10 of http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf -// - - - -#if CONFIG_IEC - - -iec_pull_atn_clk_release_data: - - lda CIA2_PRA - ora #BIT_CIA2_PRA_ATN_OUT // pull - sta CIA2_PRA - - // FALLTROUGH - -iec_pull_clk_release_data: - - lda CIA2_PRA - ora #BIT_CIA2_PRA_CLK_OUT // pull - sta CIA2_PRA -!: - and #$FF - BIT_CIA2_PRA_DAT_OUT // release - bne iec_pull_release_end // branch always - -iec_pull_clk_release_data_oneshot: - - lda CIA2_PRA - ora #BIT_CIA2_PRA_CLK_OUT // pull - bne !- // branch always - -iec_release_atn_clk_data: - - lda CIA2_PRA - and #$FF - BIT_CIA2_PRA_ATN_OUT // release - sta CIA2_PRA - - // FALLTROUGH - -iec_release_clk_data: - - lda CIA2_PRA - and #$FF - BIT_CIA2_PRA_DAT_OUT // release - sta CIA2_PRA - and #$FF - BIT_CIA2_PRA_CLK_OUT // release - jmp iec_pull_release_end - -iec_release_clk_pull_data: - - lda CIA2_PRA - ora #BIT_CIA2_PRA_DAT_OUT // pull - sta CIA2_PRA - and #$FF - BIT_CIA2_PRA_CLK_OUT // release - bne iec_pull_release_end // branch always - -iec_pull_data_release_atn_clk: - - lda CIA2_PRA - ora #BIT_CIA2_PRA_DAT_OUT // pull - sta CIA2_PRA - and #$FF - BIT_CIA2_PRA_CLK_OUT // release - sta CIA2_PRA - - // FALLTROUGH - -iec_release_atn: - - lda CIA2_PRA - and #$FF - BIT_CIA2_PRA_ATN_OUT // release - - // FALLTROUGH - -iec_pull_release_end: - - sta CIA2_PRA - rts - - -#endif // CONFIG_IEC - - -#endif // ROM layout +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + +// +// Helper IEC routines to pull/release certain lines +// +// Order of operation is set for extra robustness, on non-emulated hardware +// lines might need few cycles to stabilize (released CLK = DATA considered valid), +// see page 10 of http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf +// + + + +#if CONFIG_IEC + + +iec_pull_atn_clk_release_data: + + lda CIA2_PRA + ora #BIT_CIA2_PRA_ATN_OUT // pull + sta CIA2_PRA + + // FALLTROUGH + +iec_pull_clk_release_data: + + lda CIA2_PRA + ora #BIT_CIA2_PRA_CLK_OUT // pull + sta CIA2_PRA +!: + and #$FF - BIT_CIA2_PRA_DAT_OUT // release + bne iec_pull_release_end // branch always + +iec_pull_clk_release_data_oneshot: + + lda CIA2_PRA + ora #BIT_CIA2_PRA_CLK_OUT // pull + bne !- // branch always + +iec_release_atn_clk_data: + + lda CIA2_PRA + and #$FF - BIT_CIA2_PRA_ATN_OUT // release + sta CIA2_PRA + + // FALLTROUGH + +iec_release_clk_data: + + lda CIA2_PRA + and #$FF - BIT_CIA2_PRA_DAT_OUT // release + sta CIA2_PRA + and #$FF - BIT_CIA2_PRA_CLK_OUT // release + jmp iec_pull_release_end + +iec_release_clk_pull_data: + + lda CIA2_PRA + ora #BIT_CIA2_PRA_DAT_OUT // pull + sta CIA2_PRA + and #$FF - BIT_CIA2_PRA_CLK_OUT // release + bne iec_pull_release_end // branch always + +iec_pull_data_release_atn_clk: + + lda CIA2_PRA + ora #BIT_CIA2_PRA_DAT_OUT // pull + sta CIA2_PRA + and #$FF - BIT_CIA2_PRA_CLK_OUT // release + sta CIA2_PRA + + // FALLTROUGH + +iec_release_atn: + + lda CIA2_PRA + and #$FF - BIT_CIA2_PRA_ATN_OUT // release + + // FALLTROUGH + +iec_pull_release_end: + + sta CIA2_PRA + rts + + +#endif // CONFIG_IEC diff --git a/c64/kernal/iec/iec_return.s b/c64/kernal/iec/iec_return.s index 3141f1dd..0c0377a4 100644 --- a/c64/kernal/iec/iec_return.s +++ b/c64/kernal/iec/iec_return.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Helper routines to return with error/success @@ -40,6 +42,3 @@ iec_return_DEVICE_NOT_FOUND: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_rx_byte.s b/c64/kernal/iec/iec_rx_byte.s index eb4fc393..9dd110df 100644 --- a/c64/kernal/iec/iec_rx_byte.s +++ b/c64/kernal/iec/iec_rx_byte.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Receive a byte from the IEC bus. // Implemented based on https://www.pagetable.com/?p=1135, https://github.com/mist64/cbmbus_doc, @@ -157,6 +159,3 @@ iec_rx_end: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_rx_check_eoi.s b/c64/kernal/iec/iec_rx_check_eoi.s index 6b5e9403..26de252e 100644 --- a/c64/kernal/iec/iec_rx_check_eoi.s +++ b/c64/kernal/iec/iec_rx_check_eoi.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Helper routine to check for EOI while receiving byte from IEC @@ -40,6 +42,3 @@ iec_rx_check_eoi_done: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_send_file_name.s b/c64/kernal/iec/iec_send_file_name.s index 46a35577..b250612a 100644 --- a/c64/kernal/iec/iec_send_file_name.s +++ b/c64/kernal/iec/iec_send_file_name.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Sends file (stream) name to IEC device @@ -43,6 +45,3 @@ iec_send_file_name_done: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_set_idle.s b/c64/kernal/iec/iec_set_idle.s index 0c2b1f7b..a6f135c8 100644 --- a/c64/kernal/iec/iec_set_idle.s +++ b/c64/kernal/iec/iec_set_idle.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE #if CONFIG_IEC @@ -13,6 +15,3 @@ iec_set_idle: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_turnaround_to_listen.s b/c64/kernal/iec/iec_turnaround_to_listen.s index 6a2c4094..9dbd9bf4 100644 --- a/c64/kernal/iec/iec_turnaround_to_listen.s +++ b/c64/kernal/iec/iec_turnaround_to_listen.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // According to http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf // pages 7--8. @@ -41,6 +43,3 @@ iec_turnaround_to_listen: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_turnaround_to_talk.s b/c64/kernal/iec/iec_turnaround_to_talk.s index 0cc73093..2c5032a8 100644 --- a/c64/kernal/iec/iec_turnaround_to_talk.s +++ b/c64/kernal/iec/iec_turnaround_to_talk.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // According to http://www.zimmers.net/anonftp/pub/cbm/programming/serial-bus.pdf // pages 7--8. @@ -33,6 +35,3 @@ iec_turnaround_to_talk: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_tx_byte.s b/c64/kernal/iec/iec_tx_byte.s index 5e6a98c8..53295b0a 100644 --- a/c64/kernal/iec/iec_tx_byte.s +++ b/c64/kernal/iec/iec_tx_byte.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Implemented based on https://www.pagetable.com/?p=1135, https://github.com/mist64/cbmbus_doc @@ -162,6 +164,3 @@ iec_tx_common_finalize: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_tx_command.s b/c64/kernal/iec/iec_tx_command.s index 7d636fab..68d2b8f7 100644 --- a/c64/kernal/iec/iec_tx_command.s +++ b/c64/kernal/iec/iec_tx_command.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Implemented based on https://www.pagetable.com/?p=1135, https://github.com/mist64/cbmbus_doc @@ -42,6 +44,3 @@ iec_tx_command: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_tx_command_finalize.s b/c64/kernal/iec/iec_tx_command_finalize.s index f0322fcc..22b3594c 100644 --- a/c64/kernal/iec/iec_tx_command_finalize.s +++ b/c64/kernal/iec/iec_tx_command_finalize.s @@ -1,5 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) - +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Routine to finalize some IEC commands - which do not end in turnaround and are not followed by others // Implemented based on https://www.pagetable.com/?p=1135, https://github.com/mist64/cbmbus_doc @@ -24,6 +25,3 @@ iec_tx_command_finalize: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_tx_flush.s b/c64/kernal/iec/iec_tx_flush.s index 3b870d71..f2c7141b 100644 --- a/c64/kernal/iec/iec_tx_flush.s +++ b/c64/kernal/iec/iec_tx_flush.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Flush the IEC output buffer (if not empty) - send byte with EOI // @@ -21,6 +23,3 @@ iec_tx_flush: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_update_eal_by_y.s b/c64/kernal/iec/iec_update_eal_by_y.s index 8248345e..88187449 100644 --- a/c64/kernal/iec/iec_update_eal_by_y.s +++ b/c64/kernal/iec/iec_update_eal_by_y.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Common EAL update routine @@ -20,6 +22,3 @@ iec_update_EAL_by_Y: // note: Carry has to be set by caller! #endif - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_wait1ms.s b/c64/kernal/iec/iec_wait1ms.s index bcbc48ce..2b1452fd 100644 --- a/c64/kernal/iec/iec_wait1ms.s +++ b/c64/kernal/iec/iec_wait1ms.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Wait 1 ms (1000 usec) @@ -32,6 +34,3 @@ wait_x_bars: // additional entry point for delayy in screen and tape support iec_wait_rts: // dummy RTS, for very short waits rts - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_wait20us.s b/c64/kernal/iec/iec_wait20us.s index 1056544d..d5db90ed 100644 --- a/c64/kernal/iec/iec_wait20us.s +++ b/c64/kernal/iec/iec_wait20us.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE #if CONFIG_IEC @@ -27,6 +29,3 @@ iec_wait20us: // 21 cycles #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_wait60us.s b/c64/kernal/iec/iec_wait60us.s index e9812926..6b83e45f 100644 --- a/c64/kernal/iec/iec_wait60us.s +++ b/c64/kernal/iec/iec_wait60us.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Note: damages .X @@ -32,6 +34,3 @@ iec_wait60us: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_wait_for_clk_release.s b/c64/kernal/iec/iec_wait_for_clk_release.s index a3e038a6..ac259952 100644 --- a/c64/kernal/iec/iec_wait_for_clk_release.s +++ b/c64/kernal/iec/iec_wait_for_clk_release.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE #if CONFIG_IEC @@ -12,6 +14,3 @@ iec_wait_for_clk_release: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_wait_for_data_pull.s b/c64/kernal/iec/iec_wait_for_data_pull.s index 6635419f..d74a5675 100644 --- a/c64/kernal/iec/iec_wait_for_data_pull.s +++ b/c64/kernal/iec/iec_wait_for_data_pull.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE #if CONFIG_IEC @@ -14,6 +16,3 @@ iec_wait_for_data_pull: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/iec_wait_for_data_release.s b/c64/kernal/iec/iec_wait_for_data_release.s index 99688ed6..d4f483b4 100644 --- a/c64/kernal/iec/iec_wait_for_data_release.s +++ b/c64/kernal/iec/iec_wait_for_data_release.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE #if CONFIG_IEC @@ -13,6 +15,3 @@ iec_wait_for_data_release: rts #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/listen.s b/c64/kernal/iec/listen.s index 0f408c73..33bb554d 100644 --- a/c64/kernal/iec/listen.s +++ b/c64/kernal/iec/listen.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -34,6 +36,3 @@ LISTEN: jmp kernalerror_ILLEGAL_DEVICE_NUMBER #endif - - -#endif // ROM layout diff --git a/c64/kernal/iec/load_iec.s b/c64/kernal/iec/load_iec.s index 321072cf..578e9f97 100644 --- a/c64/kernal/iec/load_iec.s +++ b/c64/kernal/iec/load_iec.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // IEC part of the LOAD routine @@ -193,6 +195,3 @@ load_iec_get_addr_byte: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/open_iec.s b/c64/kernal/iec/open_iec.s index c2c95dfe..a2ed2354 100644 --- a/c64/kernal/iec/open_iec.s +++ b/c64/kernal/iec/open_iec.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // IEC part of the OPEN routine @@ -39,6 +41,3 @@ open_iec_done: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/save_iec.s b/c64/kernal/iec/save_iec.s index 59e3bfa2..a90827a7 100644 --- a/c64/kernal/iec/save_iec.s +++ b/c64/kernal/iec/save_iec.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // IEC part of the SAVE routine @@ -126,6 +128,3 @@ iec_save_loop_end: #endif // CONFIG_IEC - - -#endif // ROM layout diff --git a/c64/kernal/iec/second.s b/c64/kernal/iec/second.s index a5a1fb54..60fce725 100644 --- a/c64/kernal/iec/second.s +++ b/c64/kernal/iec/second.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -29,6 +31,3 @@ SECOND: jmp kernalerror_ILLEGAL_DEVICE_NUMBER #endif - - -#endif // ROM layout diff --git a/c64/kernal/iec/talk.s b/c64/kernal/iec/talk.s index 54216edd..23b0504e 100644 --- a/c64/kernal/iec/talk.s +++ b/c64/kernal/iec/talk.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -47,6 +49,3 @@ common_talk_listen: // common part of TALK and LISTEN jmp kernalerror_ILLEGAL_DEVICE_NUMBER #endif - - -#endif // ROM layout diff --git a/c64/kernal/iec/tksa.s b/c64/kernal/iec/tksa.s index 1084121e..59d0b9e5 100644 --- a/c64/kernal/iec/tksa.s +++ b/c64/kernal/iec/tksa.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -29,6 +31,3 @@ TKSA: jmp kernalerror_ILLEGAL_DEVICE_NUMBER #endif - - -#endif // ROM layout diff --git a/c64/kernal/iec/unlsn.s b/c64/kernal/iec/unlsn.s index df96b33a..d727fd92 100644 --- a/c64/kernal/iec/unlsn.s +++ b/c64/kernal/iec/unlsn.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -36,6 +38,3 @@ UNLSN: jmp kernalerror_ILLEGAL_DEVICE_NUMBER #endif - - -#endif // ROM layout diff --git a/c64/kernal/iec/untlk.s b/c64/kernal/iec/untlk.s index 221d7698..2fab716a 100644 --- a/c64/kernal/iec/untlk.s +++ b/c64/kernal/iec/untlk.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -47,6 +49,3 @@ common_untlk_tksa: // common part of UNTLK and TKSA jmp kernalerror_ILLEGAL_DEVICE_NUMBER #endif - - -#endif // ROM layout diff --git a/c64/kernal/iec_fast/burst_cia1_advertise.s b/c64/kernal/iec_fast/burst_cia1_advertise.s index 34cfa431..eb7e6e2b 100644 --- a/c64/kernal/iec_fast/burst_cia1_advertise.s +++ b/c64/kernal/iec_fast/burst_cia1_advertise.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Advertise burst IEC protocol support to the receiver @@ -32,6 +34,3 @@ burst_advertise_done: #endif - - -#endif // ROM layout diff --git a/c64/kernal/iec_fast/burst_cia2_advertise.s b/c64/kernal/iec_fast/burst_cia2_advertise.s index c73134dc..26303cc5 100644 --- a/c64/kernal/iec_fast/burst_cia2_advertise.s +++ b/c64/kernal/iec_fast/burst_cia2_advertise.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Advertise burst IEC protocol support to the receiver @@ -56,6 +58,3 @@ burst_advertise_done: #endif - - -#endif // ROM layout diff --git a/c64/kernal/iec_fast/burst_soft_advertise.s b/c64/kernal/iec_fast/burst_soft_advertise.s index bcbe565c..7e9e9dcf 100644 --- a/c64/kernal/iec_fast/burst_soft_advertise.s +++ b/c64/kernal/iec_fast/burst_soft_advertise.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Advertise burst IEC protocol support to the receiver @@ -27,6 +29,3 @@ burst_advertise_done: #endif - - -#endif // ROM layout diff --git a/c64/kernal/iec_fast/dolphindos_detect.s b/c64/kernal/iec_fast/dolphindos_detect.s index 75abe6d7..92a53649 100644 --- a/c64/kernal/iec_fast/dolphindos_detect.s +++ b/c64/kernal/iec_fast/dolphindos_detect.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Helper routine for JiffyDOS detection @@ -61,6 +63,3 @@ dolphindos_detect_success: #endif // CONFIG_IEC_DOLPHINDOS - - -#endif // ROM layout diff --git a/c64/kernal/iec_fast/dolphindos_load.s b/c64/kernal/iec_fast/dolphindos_load.s index 9d57239a..f32a8502 100644 --- a/c64/kernal/iec_fast/dolphindos_load.s +++ b/c64/kernal/iec_fast/dolphindos_load.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // DolphinDOS protocol support for IEC - optimized load loop @@ -118,6 +120,3 @@ dolphindos_load_end: #endif // CONFIG_IEC_DOLPHINDOS and not CONFIG_MEMORY_MODEL_60K - - -#endif // ROM layout diff --git a/c64/kernal/iec_fast/jiffydos_bittable.s b/c64/kernal/iec_fast/jiffydos_bittable.s index 930e1665..0ac8081e 100644 --- a/c64/kernal/iec_fast/jiffydos_bittable.s +++ b/c64/kernal/iec_fast/jiffydos_bittable.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Helper table for encoding lower nibble for JiffyDOS, @@ -38,6 +40,3 @@ jiffydos_bittable: #endif // CONFIG_IEC_JIFFYDOS - - -#endif // ROM layout diff --git a/c64/kernal/iec_fast/jiffydos_detect.s b/c64/kernal/iec_fast/jiffydos_detect.s index 982590d5..3488ee6b 100644 --- a/c64/kernal/iec_fast/jiffydos_detect.s +++ b/c64/kernal/iec_fast/jiffydos_detect.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Helper routine for JiffyDOS detection @@ -50,6 +52,3 @@ jiffydos_detect_end: #endif // CONFIG_IEC_JIFFYDOS - - -#endif // ROM layout diff --git a/c64/kernal/iec_fast/jiffydos_load.s b/c64/kernal/iec_fast/jiffydos_load.s index d6f4c168..0fc3a11b 100644 --- a/c64/kernal/iec_fast/jiffydos_load.s +++ b/c64/kernal/iec_fast/jiffydos_load.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // JiffyDOS protocol support for IEC - optimized load loop @@ -169,6 +171,3 @@ jiffydos_load_end: #endif // CONFIG_IEC_JIFFYDOS and not CONFIG_MEMORY_MODEL_60K - - -#endif // ROM layout diff --git a/c64/kernal/iec_fast/jiffydos_prepare.s b/c64/kernal/iec_fast/jiffydos_prepare.s index 4acf4011..214248af 100644 --- a/c64/kernal/iec_fast/jiffydos_prepare.s +++ b/c64/kernal/iec_fast/jiffydos_prepare.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // JiffyDOS transfer preparation routine @@ -28,6 +30,3 @@ jiffydos_prepare: #endif // CONFIG_IEC_JIFFYDOS - - -#endif // ROM layout diff --git a/c64/kernal/iec_fast/jiffydos_rx_byte.s b/c64/kernal/iec_fast/jiffydos_rx_byte.s index 3b25675f..13406df8 100644 --- a/c64/kernal/iec_fast/jiffydos_rx_byte.s +++ b/c64/kernal/iec_fast/jiffydos_rx_byte.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // JiffyDOS protocol support for IEC - byte reception @@ -109,6 +111,3 @@ jiffydos_rx_byte_end: #endif // CONFIG_IEC_JIFFYDOS - - -#endif // ROM layout diff --git a/c64/kernal/iec_fast/jiffydos_tx_byte.s b/c64/kernal/iec_fast/jiffydos_tx_byte.s index 85c2f0cf..d600cc3f 100644 --- a/c64/kernal/iec_fast/jiffydos_tx_byte.s +++ b/c64/kernal/iec_fast/jiffydos_tx_byte.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // JiffyDOS protocol support for IEC - byte transfer @@ -102,6 +104,3 @@ jiffydos_tx_byte_wait_eoi: #endif // CONFIG_IEC_JIFFYDOS - - -#endif // ROM layout diff --git a/c64/kernal/iec_fast/jiffydos_wait_line.s b/c64/kernal/iec_fast/jiffydos_wait_line.s index a086d3d1..171b3f18 100644 --- a/c64/kernal/iec_fast/jiffydos_wait_line.s +++ b/c64/kernal/iec_fast/jiffydos_wait_line.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // JiffyDOS helper routine to wait for appropriate moment, @@ -33,6 +35,3 @@ jiffydos_wait_line_done: #endif // CONFIG_IEC_JIFFYDOS - - -#endif // ROM layout diff --git a/c64/kernal/init/cartridge_check.s b/c64/kernal/init/cartridge_check.s index f8705b27..b47c61e7 100644 --- a/c64/kernal/init/cartridge_check.s +++ b/c64/kernal/init/cartridge_check.s @@ -1,18 +1,22 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + // c64 prg p263 cartridge_check: + ldx #$05 -cartridge_check_l1: +!: lda CART_SIG-1,x cmp cartridge_signature-1,x - bne no_cartridge + bne cartridge_check_end dex - bne cartridge_check_l1 + bne !- + // FALLTROUGH -no_cartridge: + +cartridge_check_end: + rts - - -#endif // ROM layout diff --git a/c64/kernal/init/cint_screen_keyboard.s b/c64/kernal/init/cint_screen_keyboard.s index 70dad444..ad2241c3 100644 --- a/c64/kernal/init/cint_screen_keyboard.s +++ b/c64/kernal/init/cint_screen_keyboard.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // This is a part CINT which initializes screen and keyboard @@ -6,6 +8,8 @@ // For more details see: // - [RG64] C64 Programmers Reference Guide - page 280 // - [CM64] Computes Mapping the Commodore 64 - page 242 +// + cint_screen_keyboard: @@ -70,6 +74,3 @@ cint_screen_keyboard: // Fallthrough/jump to screen clear routine (Computes Mapping the 64 p215) jmp clear_screen - - -#endif // ROM layout diff --git a/c64/kernal/init/e518.cint_legacy.s b/c64/kernal/init/e518.cint_legacy.s index 8b404300..a143692d 100644 --- a/c64/kernal/init/e518.cint_legacy.s +++ b/c64/kernal/init/e518.cint_legacy.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Part of the official Kernal routine, described in: @@ -21,6 +23,3 @@ cint_legacy: // $E518 // Game 'Operacja Proboszcz' is one example. jmp cint_screen_keyboard // XXX try to fit the code here - - -#endif // ROM layout diff --git a/c64/kernal/init/e5a0.setup_vicii.s b/c64/kernal/init/e5a0.setup_vicii.s index 30958d41..a7a3e4f4 100644 --- a/c64/kernal/init/e5a0.setup_vicii.s +++ b/c64/kernal/init/e5a0.setup_vicii.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Well-known Kernal routine, described in: @@ -65,6 +67,3 @@ setup_vicii: // Setup default I/O devices jmp clrchn_reset - - -#endif // ROM layout diff --git a/c64/kernal/init/fce2.hw_entry_reset.s b/c64/kernal/init/fce2.hw_entry_reset.s index ab646e89..dbe2c942 100644 --- a/c64/kernal/init/fce2.hw_entry_reset.s +++ b/c64/kernal/init/fce2.hw_entry_reset.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Resources describing the C64 reset sequence: // https://www.c64-wiki.com/wiki/Reset_(Process) @@ -50,6 +52,3 @@ hw_entry_reset: // c64 prg p269 jmp (IBASIC_COLD_START) - - -#endif // ROM layout diff --git a/c64/kernal/init/fda3.ioinit.s b/c64/kernal/init/fda3.ioinit.s index 758b2dab..e0fa1ecd 100644 --- a/c64/kernal/init/fda3.ioinit.s +++ b/c64/kernal/init/fda3.ioinit.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -144,6 +146,3 @@ IOINIT: rts #endif - - -#endif // ROM layout diff --git a/c64/kernal/init/ff5b.cint.s b/c64/kernal/init/ff5b.cint.s index e7d0aefa..784bb73f 100644 --- a/c64/kernal/init/ff5b.cint.s +++ b/c64/kernal/init/ff5b.cint.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -13,6 +15,3 @@ CINT: jsr cint_legacy jmp setup_pal_ntsc - - -#endif // ROM layout diff --git a/c64/kernal/init/fffc.vector_reset.s b/c64/kernal/init/fffc.vector_reset.s index 07ab436f..c8322445 100644 --- a/c64/kernal/init/fffc.vector_reset.s +++ b/c64/kernal/init/fffc.vector_reset.s @@ -1,9 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + // $FFFC - CPU Reset Vector // Uncontrovertial, as it is a CPU requirement, and nothing else. .word hw_entry_reset - - -#endif // ROM layout diff --git a/c64/kernal/init/setup_pal_ntsc.s b/c64/kernal/init/setup_pal_ntsc.s index 91b70b58..ebc22052 100644 --- a/c64/kernal/init/setup_pal_ntsc.s +++ b/c64/kernal/init/setup_pal_ntsc.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Detect video system (PAL/NTSC), use method by Graham, as it is short and reliable // see here: https://codebase64.org/doku.php?id=base:detect_pal_ntsc @@ -60,6 +62,3 @@ setup_irq_timer: // entry point needed by UP9600 and CIA1 burst mod support sta CIA1_TIMAHI // $DC05 rts - - -#endif // ROM layout diff --git a/c64/kernal/interrupts/ea31.default_irq_handler.s b/c64/kernal/interrupts/ea31.default_irq_handler.s index f5380e5e..671839a3 100644 --- a/c64/kernal/interrupts/ea31.default_irq_handler.s +++ b/c64/kernal/interrupts/ea31.default_irq_handler.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE default_irq_handler: @@ -44,6 +46,3 @@ default_irq_handler_end_tape: // Acknowledge CIA interrupt and return jmp clear_cia1_interrupt_flag_and_return_from_interrupt - - -#endif // ROM layout diff --git a/c64/kernal/interrupts/ea7e.ack_cia1_return_from_interrupt.s b/c64/kernal/interrupts/ea7e.ack_cia1_return_from_interrupt.s index be43f53c..6ba7c968 100644 --- a/c64/kernal/interrupts/ea7e.ack_cia1_return_from_interrupt.s +++ b/c64/kernal/interrupts/ea7e.ack_cia1_return_from_interrupt.s @@ -1,4 +1,7 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + // https://csdb.dk/forums/index.php?roomid=11&topicid=5776 // Clear the CIA1 interrupt flag, and then fall through to @@ -11,6 +14,3 @@ clear_cia1_interrupt_flag_and_return_from_interrupt: ldy CIA1_ICR // FALL THROUGH to $EA81 - - -#endif // ROM layout diff --git a/c64/kernal/interrupts/ea81.return_from_interrupt.s b/c64/kernal/interrupts/ea81.return_from_interrupt.s index c98fdc5a..4a834206 100644 --- a/c64/kernal/interrupts/ea81.return_from_interrupt.s +++ b/c64/kernal/interrupts/ea81.return_from_interrupt.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // The IRQ is a commonly messed with thing on the C64, // so we need to handle entry points that are commonly @@ -17,7 +19,5 @@ return_from_interrupt: ply_trash_a plx_trash_a pla + rti - - -#endif // ROM layout diff --git a/c64/kernal/interrupts/fe47.default_nmi_handler.s b/c64/kernal/interrupts/fe47.default_nmi_handler.s index 80d22c67..96a2bccb 100644 --- a/c64/kernal/interrupts/fe47.default_nmi_handler.s +++ b/c64/kernal/interrupts/fe47.default_nmi_handler.s @@ -1,4 +1,7 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + default_nmi_handler: @@ -31,6 +34,3 @@ default_nmi_handler: sta CMP0+0 sta CMP0+1 jmp (CBINV) - - -#endif // ROM layout diff --git a/c64/kernal/interrupts/fe66.default_brk_handler.s b/c64/kernal/interrupts/fe66.default_brk_handler.s index 0be9fe7b..bcec92a5 100644 --- a/c64/kernal/interrupts/fe66.default_brk_handler.s +++ b/c64/kernal/interrupts/fe66.default_brk_handler.s @@ -1,4 +1,7 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + default_brk_handler: @@ -23,6 +26,3 @@ default_brk_handler: cli jmp (IBASIC_WARM_START) - - -#endif // ROM layout diff --git a/c64/kernal/interrupts/fffa.vector_nmi.s b/c64/kernal/interrupts/fffa.vector_nmi.s index af50742b..c33c2602 100644 --- a/c64/kernal/interrupts/fffa.vector_nmi.s +++ b/c64/kernal/interrupts/fffa.vector_nmi.s @@ -1,9 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + // $FFFA - CPU NMI Hanlder // Uncontrovertial as this is also a CPU requirement. .word hw_entry_nmi - - -#endif // ROM layout diff --git a/c64/kernal/interrupts/fffe.vector_irq.s b/c64/kernal/interrupts/fffe.vector_irq.s index 1000bac8..755e9c57 100644 --- a/c64/kernal/interrupts/fffe.vector_irq.s +++ b/c64/kernal/interrupts/fffe.vector_irq.s @@ -1,10 +1,10 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + // $FFFE - CPU IRQ Vector. // This is non-controvertial, as it is a 6502 CPU requirement, and we just have to point // it to whatever IRQ routine we make. .word hw_entry_irq - - -#endif // ROM layout diff --git a/c64/kernal/interrupts/hw_entry_irq.s b/c64/kernal/interrupts/hw_entry_irq.s index 8fe45c93..8177de7c 100644 --- a/c64/kernal/interrupts/hw_entry_irq.s +++ b/c64/kernal/interrupts/hw_entry_irq.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE hw_entry_irq: @@ -48,6 +50,3 @@ irq_handler_brk: // Interrupt caused by BRK jmp (CBINV) - - -#endif // ROM layout diff --git a/c64/kernal/interrupts/hw_entry_nmi.s b/c64/kernal/interrupts/hw_entry_nmi.s index 017e54c2..2ed19829 100644 --- a/c64/kernal/interrupts/hw_entry_nmi.s +++ b/c64/kernal/interrupts/hw_entry_nmi.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE hw_entry_nmi: @@ -20,6 +22,3 @@ hw_entry_nmi: // Vector not initialized - call default interrupt routine pla jmp default_nmi_handler - - -#endif // ROM layout diff --git a/c64/kernal/iostack/chkinout.s b/c64/kernal/iostack/chkinout.s index 951a4f92..1d7c2043 100644 --- a/c64/kernal/iostack/chkinout.s +++ b/c64/kernal/iostack/chkinout.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Common part of CHKIN and CKOUT @@ -17,6 +19,3 @@ chkinout_file_not_open: ply_trash_a pla jmp kernalerror_FILE_NOT_OPEN - - -#endif // ROM layout diff --git a/c64/kernal/iostack/clall_real.s b/c64/kernal/iostack/clall_real.s index 820d6a88..7243d7d6 100644 --- a/c64/kernal/iostack/clall_real.s +++ b/c64/kernal/iostack/clall_real.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -34,6 +36,3 @@ clall_real: // Not sure whether original Kernal does so, but it seems sane to also clear possible errors jmp kernalstatus_reset - - -#endif // ROM layout diff --git a/c64/kernal/iostack/f13e.getin.s b/c64/kernal/iostack/f13e.getin.s index 88e36f11..c3017601 100644 --- a/c64/kernal/iostack/f13e.getin.s +++ b/c64/kernal/iostack/f13e.getin.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -12,6 +14,3 @@ GETIN: jmp getin_real - - -#endif // ROM layout diff --git a/c64/kernal/iostack/f157.chrin.s b/c64/kernal/iostack/f157.chrin.s index f9d43402..b663cd93 100644 --- a/c64/kernal/iostack/f157.chrin.s +++ b/c64/kernal/iostack/f157.chrin.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -47,6 +49,3 @@ chrin_getin: // jump entry for GETIN // Not a supported device jmp lvs_device_not_found_error - - -#endif // ROM layout diff --git a/c64/kernal/iostack/f1ca.chrout.s b/c64/kernal/iostack/f1ca.chrout.s index ebc31152..b528a8bb 100644 --- a/c64/kernal/iostack/f1ca.chrout.s +++ b/c64/kernal/iostack/f1ca.chrout.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -76,6 +78,3 @@ chrout_done_success: lda SCHAR clc // indicate success rts - - -#endif // ROM layout diff --git a/c64/kernal/iostack/f20e.chkin.s b/c64/kernal/iostack/f20e.chkin.s index 965bb970..99259751 100644 --- a/c64/kernal/iostack/f20e.chkin.s +++ b/c64/kernal/iostack/f20e.chkin.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routines, described in: @@ -68,6 +70,3 @@ chkin_file_not_input: ply_trash_a pla jmp kernalerror_FILE_NOT_INPUT - - -#endif // ROM layout diff --git a/c64/kernal/iostack/f250.ckout.s b/c64/kernal/iostack/f250.ckout.s index 32fe73b1..a99f359e 100644 --- a/c64/kernal/iostack/f250.ckout.s +++ b/c64/kernal/iostack/f250.ckout.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routines, described in: @@ -61,6 +63,3 @@ ckout_file_not_output: ply_trash_a pla jmp kernalerror_FILE_NOT_OUTPUT - - -#endif // ROM layout diff --git a/c64/kernal/iostack/f291.close.s b/c64/kernal/iostack/f291.close.s index 7a31ea5a..1a5b49a6 100644 --- a/c64/kernal/iostack/f291.close.s +++ b/c64/kernal/iostack/f291.close.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -56,6 +58,3 @@ close_remove_from_table: close_end: rts - - -#endif // ROM layout diff --git a/c64/kernal/iostack/f32f.clall.jmp.s b/c64/kernal/iostack/f32f.clall.jmp.s index 69efe881..3305e94a 100644 --- a/c64/kernal/iostack/f32f.clall.jmp.s +++ b/c64/kernal/iostack/f32f.clall.jmp.s @@ -1,4 +1,7 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + // Our implementation is longer than the original one, // placing it here would cause a collision with CLRCHN @@ -6,6 +9,3 @@ CLALL: jmp clall_real - - -#endif // ROM layout diff --git a/c64/kernal/iostack/f333.clrchn.s b/c64/kernal/iostack/f333.clrchn.s index ef566281..7e316739 100644 --- a/c64/kernal/iostack/f333.clrchn.s +++ b/c64/kernal/iostack/f333.clrchn.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -31,6 +33,3 @@ clrchn_reset: // entry needed by setup_vicii sta DFLTO rts - - -#endif // ROM layout diff --git a/c64/kernal/iostack/f34a.open.s b/c64/kernal/iostack/f34a.open.s index 67c373c1..6387bdf1 100644 --- a/c64/kernal/iostack/f34a.open.s +++ b/c64/kernal/iostack/f34a.open.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -77,6 +79,3 @@ open_done_success: clc rts - - -#endif // ROM layout diff --git a/c64/kernal/iostack/f49e.load_prep.s b/c64/kernal/iostack/f49e.load_prep.s index 523444a4..6d71806c 100644 --- a/c64/kernal/iostack/f49e.load_prep.s +++ b/c64/kernal/iostack/f49e.load_prep.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // LOAD preparation routine @@ -22,6 +24,3 @@ LOAD_PREP: sty MEMUSS+1 stx MEMUSS+0 jmp (ILOAD) - - -#endif // ROM layout diff --git a/c64/kernal/iostack/f4a5.load.s b/c64/kernal/iostack/f4a5.load.s index 66850933..7c39a23e 100644 --- a/c64/kernal/iostack/f4a5.load.s +++ b/c64/kernal/iostack/f4a5.load.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -57,6 +59,3 @@ LOAD: #endif jmp lvs_illegal_device_number - - -#endif // ROM layout diff --git a/c64/kernal/iostack/f5dd.save_prep.s b/c64/kernal/iostack/f5dd.save_prep.s index a595e1c4..be34baea 100644 --- a/c64/kernal/iostack/f5dd.save_prep.s +++ b/c64/kernal/iostack/f5dd.save_prep.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // SAVE preparation routine @@ -28,6 +30,3 @@ SAVE_PREP: sta STAL+0 jmp (ISAVE) - - -#endif // ROM layout diff --git a/c64/kernal/iostack/f5ed.save.s b/c64/kernal/iostack/f5ed.save.s index 57ef482c..caf08d01 100644 --- a/c64/kernal/iostack/f5ed.save.s +++ b/c64/kernal/iostack/f5ed.save.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -29,6 +31,3 @@ SAVE: #endif jmp lvs_illegal_device_number - - -#endif // ROM layout diff --git a/c64/kernal/iostack/findfls.s b/c64/kernal/iostack/findfls.s index 07517924..52c04c5a 100644 --- a/c64/kernal/iostack/findfls.s +++ b/c64/kernal/iostack/findfls.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Just a helper routine @@ -21,6 +23,3 @@ find_fls_not_found: sec rts - - -#endif // ROM layout diff --git a/c64/kernal/iostack/getin_real.s b/c64/kernal/iostack/getin_real.s index 01f29026..335c0319 100644 --- a/c64/kernal/iostack/getin_real.s +++ b/c64/kernal/iostack/getin_real.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -27,6 +29,3 @@ getin_real: #endif // HAS_RS232 jmp chrin_getin - - -#endif // ROM layout diff --git a/c64/kernal/iostack/load_save_common.s b/c64/kernal/iostack/load_save_common.s index d8350989..7e6e0fb2 100644 --- a/c64/kernal/iostack/load_save_common.s +++ b/c64/kernal/iostack/load_save_common.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Helper functions for various LOAD/VERIFY/SAVE routine variants (IEC / U64 / etc.) @@ -271,6 +273,3 @@ lvs_verify_error: rts #endif - - -#endif // ROM layout diff --git a/c64/kernal/iostack/readst.s b/c64/kernal/iostack/readst.s index 0c2d29b7..2c103c4b 100644 --- a/c64/kernal/iostack/readst.s +++ b/c64/kernal/iostack/readst.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -30,6 +32,3 @@ READST: lda IOSTATUS rts - - -#endif // ROM layout diff --git a/c64/kernal/iostack/setfls.s b/c64/kernal/iostack/setfls.s index 64f4ecb5..086124d3 100644 --- a/c64/kernal/iostack/setfls.s +++ b/c64/kernal/iostack/setfls.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -19,6 +21,3 @@ SETFLS: stx FA rts - - -#endif // ROM layout diff --git a/c64/kernal/iostack/setmsg.s b/c64/kernal/iostack/setmsg.s index 60790752..5465e3c8 100644 --- a/c64/kernal/iostack/setmsg.s +++ b/c64/kernal/iostack/setmsg.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -10,8 +12,6 @@ // SETMSG: + sta MSGFLG rts - - -#endif // ROM layout diff --git a/c64/kernal/iostack/setnam.s b/c64/kernal/iostack/setnam.s index 42191c4d..fd13b15a 100644 --- a/c64/kernal/iostack/setnam.s +++ b/c64/kernal/iostack/setnam.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -19,6 +21,3 @@ SETNAM: stx FNADDR + 0 rts - - -#endif // ROM layout diff --git a/c64/kernal/iostack/settmo.s b/c64/kernal/iostack/settmo.s index f237ef28..1c100118 100644 --- a/c64/kernal/iostack/settmo.s +++ b/c64/kernal/iostack/settmo.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -11,8 +13,6 @@ SETTMO: + sta TIMOUT rts - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ff81.jcint.s b/c64/kernal/jumptable/ff81.jcint.s index 996a3ad1..c15b3754 100644 --- a/c64/kernal/jumptable/ff81.jcint.s +++ b/c64/kernal/jumptable/ff81.jcint.s @@ -1,9 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + // Initialise screen editor // C64 Programmers Reference Guide Page 272 jmp CINT - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ff84.jioinit.s b/c64/kernal/jumptable/ff84.jioinit.s index f80e7374..4aec4521 100644 --- a/c64/kernal/jumptable/ff84.jioinit.s +++ b/c64/kernal/jumptable/ff84.jioinit.s @@ -1,9 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + // Initialise input/output // C64 Programmers Reference Guide Page 272 jmp IOINIT - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ff87.jramtas.s b/c64/kernal/jumptable/ff87.jramtas.s index 3a948d26..5e0b2f47 100644 --- a/c64/kernal/jumptable/ff87.jramtas.s +++ b/c64/kernal/jumptable/ff87.jramtas.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Initialise RAM, allocate tape buffer, set screen to $0400 // C64 Programmers Reference Guide Page 273 jmp RAMTAS - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ff8a.jrestor.s b/c64/kernal/jumptable/ff8a.jrestor.s index 67480085..b424d743 100644 --- a/c64/kernal/jumptable/ff8a.jrestor.s +++ b/c64/kernal/jumptable/ff8a.jrestor.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Restore default IO vectors // C64 Programmers Reference Guide Page 273 jmp RESTOR - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ff8d.jvector.s b/c64/kernal/jumptable/ff8d.jvector.s index d8aa7536..473164b5 100644 --- a/c64/kernal/jumptable/ff8d.jvector.s +++ b/c64/kernal/jumptable/ff8d.jvector.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Read/set vectored I/O // C64 Programmers Reference Guide Page 273 jmp VECTOR - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ff90.jsetmsg.s b/c64/kernal/jumptable/ff90.jsetmsg.s index db47557b..7f68b5d0 100644 --- a/c64/kernal/jumptable/ff90.jsetmsg.s +++ b/c64/kernal/jumptable/ff90.jsetmsg.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Control KERNAL messages // C64 Programmers Reference Guide Page 273 jmp SETMSG - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ff93.jsecond.s b/c64/kernal/jumptable/ff93.jsecond.s index 09bd1785..afe4fc44 100644 --- a/c64/kernal/jumptable/ff93.jsecond.s +++ b/c64/kernal/jumptable/ff93.jsecond.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Send secondary address after LISTEN // C64 Programmers Reference Guide Page 273 jmp SECOND - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ff96.jtksa.s b/c64/kernal/jumptable/ff96.jtksa.s index 7684d841..5045e23e 100644 --- a/c64/kernal/jumptable/ff96.jtksa.s +++ b/c64/kernal/jumptable/ff96.jtksa.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Send secondary address after talk // C64 Programmers Reference Guide Page 273 jmp TKSA - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ff99.jmemtop.s b/c64/kernal/jumptable/ff99.jmemtop.s index 59857cdf..69516338 100644 --- a/c64/kernal/jumptable/ff99.jmemtop.s +++ b/c64/kernal/jumptable/ff99.jmemtop.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // read/set the top of memory // C64 Programmers Reference Guide Page 272 jmp MEMTOP - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ff9c.jmembot.s b/c64/kernal/jumptable/ff9c.jmembot.s index 39a538d2..557f9b68 100644 --- a/c64/kernal/jumptable/ff9c.jmembot.s +++ b/c64/kernal/jumptable/ff9c.jmembot.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // read/set the bottom of memory // C64 Programmers Reference Guide Page 272 jmp MEMBOT - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ff9f.jscnkey.s b/c64/kernal/jumptable/ff9f.jscnkey.s index a91699a6..b7fba783 100644 --- a/c64/kernal/jumptable/ff9f.jscnkey.s +++ b/c64/kernal/jumptable/ff9f.jscnkey.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Scan keyboard // C64 Programmers Reference Guide Page 273 jmp SCNKEY - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffa2.jsettmo.s b/c64/kernal/jumptable/ffa2.jsettmo.s index d3819103..c96e8219 100644 --- a/c64/kernal/jumptable/ffa2.jsettmo.s +++ b/c64/kernal/jumptable/ffa2.jsettmo.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Set timeout on serial bus // C64 Programmers Reference Guide Page 273 jmp SETTMO - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffa5.jacptr.s b/c64/kernal/jumptable/ffa5.jacptr.s index 1003f2c3..c9e23a6b 100644 --- a/c64/kernal/jumptable/ffa5.jacptr.s +++ b/c64/kernal/jumptable/ffa5.jacptr.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Input byte from serial port // C64 Programmers Reference Guide Page 272 jmp ACPTR - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffa8.jciout.s b/c64/kernal/jumptable/ffa8.jciout.s index e731ebb4..92f58234 100644 --- a/c64/kernal/jumptable/ffa8.jciout.s +++ b/c64/kernal/jumptable/ffa8.jciout.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Output byte to serial port // C64 Programmers Reference Guide Page 272 jmp CIOUT - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffab.juntlk.s b/c64/kernal/jumptable/ffab.juntlk.s index b56e2056..bb061270 100644 --- a/c64/kernal/jumptable/ffab.juntlk.s +++ b/c64/kernal/jumptable/ffab.juntlk.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Command serial bus to UNTALK // C64 Programmers Reference Guide Page 273 jmp UNTLK - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffae.junlsn.s b/c64/kernal/jumptable/ffae.junlsn.s index 7fdbb0ca..98eba47e 100644 --- a/c64/kernal/jumptable/ffae.junlsn.s +++ b/c64/kernal/jumptable/ffae.junlsn.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Command serial bus to UNLISTEN // C64 Programmers Reference Guide Page 273 jmp UNLSN - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffb1.jlisten.s b/c64/kernal/jumptable/ffb1.jlisten.s index ed8194b1..c8f24e27 100644 --- a/c64/kernal/jumptable/ffb1.jlisten.s +++ b/c64/kernal/jumptable/ffb1.jlisten.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Command devices on the serial bus to listen // C64 Programmers Reference Guide Page 272 jmp LISTEN - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffb4.jtalk.s b/c64/kernal/jumptable/ffb4.jtalk.s index f81e4180..6c682674 100644 --- a/c64/kernal/jumptable/ffb4.jtalk.s +++ b/c64/kernal/jumptable/ffb4.jtalk.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Command serial bus device to talk // C64 Programmers Reference Guide Page 273 jmp TALK - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffb7.jreadst.s b/c64/kernal/jumptable/ffb7.jreadst.s index 61d01c6d..bfd9e0ef 100644 --- a/c64/kernal/jumptable/ffb7.jreadst.s +++ b/c64/kernal/jumptable/ffb7.jreadst.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Read I/O statusjmp // C64 Programmers Reference Guide Page 273 jmp READST - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffba.jsetfls.s b/c64/kernal/jumptable/ffba.jsetfls.s index f74109bf..55021177 100644 --- a/c64/kernal/jumptable/ffba.jsetfls.s +++ b/c64/kernal/jumptable/ffba.jsetfls.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Set logical, first and second addresses // C64 Programmers Reference Guide Page 273 jmp SETFLS - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffbd.jsetnam.s b/c64/kernal/jumptable/ffbd.jsetnam.s index eeb753bf..1bb61381 100644 --- a/c64/kernal/jumptable/ffbd.jsetnam.s +++ b/c64/kernal/jumptable/ffbd.jsetnam.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Set file name // C64 Programmers Reference Guide Page 273 jmp SETNAM - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffc0.jopen.s b/c64/kernal/jumptable/ffc0.jopen.s index 404bc2bf..a72b8652 100644 --- a/c64/kernal/jumptable/ffc0.jopen.s +++ b/c64/kernal/jumptable/ffc0.jopen.s @@ -1,10 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // open a logical file // C64 Programmers Reference Guide Page 272 // According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (IOPEN) - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffc3.jclose.s b/c64/kernal/jumptable/ffc3.jclose.s index 368ef699..5e97e0e5 100644 --- a/c64/kernal/jumptable/ffc3.jclose.s +++ b/c64/kernal/jumptable/ffc3.jclose.s @@ -1,10 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // close a specified logical file // C64 Programmers Reference Guide Page 272 // According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (ICLOSE) - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffc6.jchkin.s b/c64/kernal/jumptable/ffc6.jchkin.s index 9f4472bb..5d2aaf98 100644 --- a/c64/kernal/jumptable/ffc6.jchkin.s +++ b/c64/kernal/jumptable/ffc6.jchkin.s @@ -1,10 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Open channel for input // C64 Programmers Reference Guide Page 272 // According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (ICHKIN) - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffc9.jckout.s b/c64/kernal/jumptable/ffc9.jckout.s index 0a090ec4..e68fe86e 100644 --- a/c64/kernal/jumptable/ffc9.jckout.s +++ b/c64/kernal/jumptable/ffc9.jckout.s @@ -1,10 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Open channel for output // C64 Programmers Reference Guide Page 272 // According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (ICKOUT) - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffcc.jclrchn.s b/c64/kernal/jumptable/ffcc.jclrchn.s index a5706482..d1e444a4 100644 --- a/c64/kernal/jumptable/ffcc.jclrchn.s +++ b/c64/kernal/jumptable/ffcc.jclrchn.s @@ -1,10 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // close input and output channels // C64 Programmers Reference Guide Page 272 // According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (ICLRCH) - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffcf.jchrin.s b/c64/kernal/jumptable/ffcf.jchrin.s index ad84480a..08cab5fd 100644 --- a/c64/kernal/jumptable/ffcf.jchrin.s +++ b/c64/kernal/jumptable/ffcf.jchrin.s @@ -1,10 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Input character from channel // C64 Programmers Reference Guide Page 272 // According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (IBASIN) - - -#endif // ROM layout \ No newline at end of file diff --git a/c64/kernal/jumptable/ffd2.jchrout.s b/c64/kernal/jumptable/ffd2.jchrout.s index e685f773..fb7b6a7d 100644 --- a/c64/kernal/jumptable/ffd2.jchrout.s +++ b/c64/kernal/jumptable/ffd2.jchrout.s @@ -1,10 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Output character to channel // C64 Programmers Reference Guide Page 272 // According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (IBSOUT) - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffd5.jload.s b/c64/kernal/jumptable/ffd5.jload.s index 092653d8..a428cb1d 100644 --- a/c64/kernal/jumptable/ffd5.jload.s +++ b/c64/kernal/jumptable/ffd5.jload.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // load RAM from a device // C64 Programmers Reference Guide Page 272 jmp LOAD_PREP - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffd8.jsave.s b/c64/kernal/jumptable/ffd8.jsave.s index f53a236c..5f755e2b 100644 --- a/c64/kernal/jumptable/ffd8.jsave.s +++ b/c64/kernal/jumptable/ffd8.jsave.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // SAVE RAM to device // C64 Programmers Reference Guide Page 273 jmp SAVE_PREP - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffdb.jsettim.s b/c64/kernal/jumptable/ffdb.jsettim.s index c6fb5529..3c0e6111 100644 --- a/c64/kernal/jumptable/ffdb.jsettim.s +++ b/c64/kernal/jumptable/ffdb.jsettim.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Set realtime clock // C64 Programmers Reference Guide Page 273 jmp SETTIM - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffde.jrdtim.s b/c64/kernal/jumptable/ffde.jrdtim.s index b269356f..5ec9a17a 100644 --- a/c64/kernal/jumptable/ffde.jrdtim.s +++ b/c64/kernal/jumptable/ffde.jrdtim.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Read real time clock // C64 Programmers Reference Guide Page 273 jmp RDTIM - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffe1.jstop.s b/c64/kernal/jumptable/ffe1.jstop.s index ac1b2b60..980b669f 100644 --- a/c64/kernal/jumptable/ffe1.jstop.s +++ b/c64/kernal/jumptable/ffe1.jstop.s @@ -1,10 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Scan stop key // C64 Programmers Reference Guide Page 273 // According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (ISTOP) - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffe4.jgetin.s b/c64/kernal/jumptable/ffe4.jgetin.s index e53a9f29..e927c5f5 100644 --- a/c64/kernal/jumptable/ffe4.jgetin.s +++ b/c64/kernal/jumptable/ffe4.jgetin.s @@ -1,10 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Get character from keyboard queue (keyboard buffer) // C64 Programmers Reference Guide Page 272 // According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (IGETIN) - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffe7.jclall.s b/c64/kernal/jumptable/ffe7.jclall.s index efae3332..a5b9fb65 100644 --- a/c64/kernal/jumptable/ffe7.jclall.s +++ b/c64/kernal/jumptable/ffe7.jclall.s @@ -1,10 +1,9 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // $FFE7 - Close all files vector // (http://codebase64.org/doku.php?id=base:kernalreference) // According to Computes Mapping the Commodore 64 (pages 74/75), this jump is indirect jmp (ICLALL) - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffea.judtim.s b/c64/kernal/jumptable/ffea.judtim.s index 5d47b17e..d4545c64 100644 --- a/c64/kernal/jumptable/ffea.judtim.s +++ b/c64/kernal/jumptable/ffea.judtim.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // $FFEA - Update jiffy clock vector // (http://codebase64.org/doku.php?id=base:kernalreference) jmp UDTIM - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/ffed.jscreen.s b/c64/kernal/jumptable/ffed.jscreen.s index bf4c0ec7..815f9614 100644 --- a/c64/kernal/jumptable/ffed.jscreen.s +++ b/c64/kernal/jumptable/ffed.jscreen.s @@ -1,9 +1,8 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // $FFED - Return screen size (X=columns, Y=rows) // (http://codebase64.org/doku.php?id=base:kernalreference) jmp SCREEN - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/fff0.jplot.s b/c64/kernal/jumptable/fff0.jplot.s index 8ca58b05..f6206f9a 100644 --- a/c64/kernal/jumptable/fff0.jplot.s +++ b/c64/kernal/jumptable/fff0.jplot.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // $FFF0 - Get/Set cursor location vector // (http://codebase64.org/doku.php?id=base:kernalreference) @@ -6,6 +8,3 @@ // X=row, Y=column jmp PLOT - - -#endif // ROM layout diff --git a/c64/kernal/jumptable/fff3.jiobase.s b/c64/kernal/jumptable/fff3.jiobase.s index 2b84c4ed..8f0b756b 100644 --- a/c64/kernal/jumptable/fff3.jiobase.s +++ b/c64/kernal/jumptable/fff3.jiobase.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -17,6 +19,3 @@ ldy #$DC ldx #$00 rts - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/chrin_keyboard.s b/c64/kernal/keyboard/chrin_keyboard.s index dcff70e4..afdf4515 100644 --- a/c64/kernal/keyboard/chrin_keyboard.s +++ b/c64/kernal/keyboard/chrin_keyboard.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Keyboard part of the CHRIN routine @@ -171,6 +173,3 @@ chrin_programmable_key: bne !- // jumps always #endif // CONFIG_PROGRAMMABLE_KEYS - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/f142.getin_keyboard.s b/c64/kernal/keyboard/f142.getin_keyboard.s index 2afaac04..51f1ec69 100644 --- a/c64/kernal/keyboard/f142.getin_keyboard.s +++ b/c64/kernal/keyboard/f142.getin_keyboard.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Well-known Kernal routine, described in: @@ -29,6 +31,3 @@ getin_keyboard: // XXX confirm that here is really a part of GETIN! clc rts - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/f6ed.stop.s b/c64/kernal/keyboard/f6ed.stop.s index 8aca9a8d..4bd842ff 100644 --- a/c64/kernal/keyboard/f6ed.stop.s +++ b/c64/kernal/keyboard/f6ed.stop.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -27,6 +29,3 @@ stop_pressed: sec lda #$00 rts - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix.s b/c64/kernal/keyboard/kb_matrix.s index ea6a7184..57458aae 100644 --- a/c64/kernal/keyboard/kb_matrix.s +++ b/c64/kernal/keyboard/kb_matrix.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Keyboard matrix, based on @@ -59,6 +61,3 @@ __kb_matrix_ctrl: #endif .byte $1C,$00,$1D,$00,$00,$1F,$1E,$00 .byte $90,$06,$00,$05,$00,$00,$11,$00 - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_128.s b/c64/kernal/keyboard/kb_matrix_128.s index ac63a0f3..9009f8b9 100644 --- a/c64/kernal/keyboard/kb_matrix_128.s +++ b/c64/kernal/keyboard/kb_matrix_128.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Extended keyboard matrix for Commodore 128 keyboards, based on @@ -29,6 +31,3 @@ kb_matrix_128_bucky_filter: #endif // CONFIG_KEYBOARD_C128 and no CONFIG_LEGACY_SCNKEY - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_65.s b/c64/kernal/keyboard/kb_matrix_65.s index 3e54aec7..eb50d79b 100644 --- a/c64/kernal/keyboard/kb_matrix_65.s +++ b/c64/kernal/keyboard/kb_matrix_65.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Extended keyboard matrix for Commodore 65 keyboards, based on @@ -20,6 +22,3 @@ kb_matrix_65_shifted: #endif // CONFIG_KEYBOARD_C65 and no CONFIG_LEGACY_SCNKEY - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_alwaysrepeat.s b/c64/kernal/keyboard/kb_matrix_alwaysrepeat.s index c9b6ea32..b49d4943 100644 --- a/c64/kernal/keyboard/kb_matrix_alwaysrepeat.s +++ b/c64/kernal/keyboard/kb_matrix_alwaysrepeat.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Matrix ids of keys which should be repeated regardless of RPTFLG @@ -22,6 +24,3 @@ __kb_matrix_alwaysrepeat_end: #endif // no CONFIG_LEGACY_SCNKEY and no CONFIG_KEY_REPEAT_ALWAYS - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_bucky.s b/c64/kernal/keyboard/kb_matrix_bucky.s index bdba72cb..089ffaef 100644 --- a/c64/kernal/keyboard/kb_matrix_bucky.s +++ b/c64/kernal/keyboard/kb_matrix_bucky.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Matrix for retrieving bucky key status on the C64 keyboard @@ -84,6 +86,3 @@ kb_matrix_bucky_shflag: // mask to be ORed to SHFLAG to mark key status #endif // no CONFIG_LEGACY_SCNKEY - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_bucky_filter.s b/c64/kernal/keyboard/kb_matrix_bucky_filter.s index 947a470d..0c693c5d 100644 --- a/c64/kernal/keyboard/kb_matrix_bucky_filter.s +++ b/c64/kernal/keyboard/kb_matrix_bucky_filter.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Matrix for filtering out bucky keys while scanning the C64 keyboard @@ -26,6 +28,3 @@ kb_matrix_bucky_filter: #endif // no CONFIG_LEGACY_SCNKEY - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_joy.s b/c64/kernal/keyboard/kb_matrix_joy.s index 06c06fc8..d19644f1 100644 --- a/c64/kernal/keyboard/kb_matrix_joy.s +++ b/c64/kernal/keyboard/kb_matrix_joy.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Matrix for retrieving C64 joystick status and inject is as keyboard event @@ -37,6 +39,3 @@ kb_matrix_joy_keytab_hi: .byte >__kb_matrix_normal // right #endif - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_lookup.s b/c64/kernal/keyboard/kb_matrix_lookup.s index f8bcd988..1d9715fc 100644 --- a/c64/kernal/keyboard/kb_matrix_lookup.s +++ b/c64/kernal/keyboard/kb_matrix_lookup.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Helper table for determining keyboard matrix decoding table on the C64 keyboard @@ -22,6 +24,3 @@ kb_matrix_lookup: .byte $FF // %111 SHIFT+VENDOR+CTRL #endif - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_lookup_legacy.s b/c64/kernal/keyboard/kb_matrix_lookup_legacy.s index 3374c8ee..b628921f 100644 --- a/c64/kernal/keyboard/kb_matrix_lookup_legacy.s +++ b/c64/kernal/keyboard/kb_matrix_lookup_legacy.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Work out if normal, shifted, control or Vendor modified keyboard. @@ -27,6 +29,3 @@ kb_matrix_lookup: .byte $80 // Vendor + CTRL + SHIFT #endif // CONFIG_LEGACY_SCNKEY - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_row_keys.s b/c64/kernal/keyboard/kb_matrix_row_keys.s index 6557442a..21bab4f5 100644 --- a/c64/kernal/keyboard/kb_matrix_row_keys.s +++ b/c64/kernal/keyboard/kb_matrix_row_keys.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Single row key codes for scanning the C64 keyboard @@ -28,6 +30,3 @@ kb_matrix_row_keys: #endif // no CONFIG_LEGACY_SCNKEY - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/kb_matrix_row_offsets.s b/c64/kernal/keyboard/kb_matrix_row_offsets.s index 1f90d00a..8b0b7d5a 100644 --- a/c64/kernal/keyboard/kb_matrix_row_offsets.s +++ b/c64/kernal/keyboard/kb_matrix_row_offsets.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Helper values to quickly determine row offset from the start of keyboard matrix @@ -22,6 +24,3 @@ kb_matrix_row_offsets: .byte 7*8 #endif // no CONFIG_LEGACY_SCNKEY - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/keyboard_disconnect.s b/c64/kernal/keyboard/keyboard_disconnect.s index 34aa2f89..5fb2bf73 100644 --- a/c64/kernal/keyboard/keyboard_disconnect.s +++ b/c64/kernal/keyboard/keyboard_disconnect.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Helper routine - disconnects the keyboard from CIA1_PRB, @@ -21,6 +23,3 @@ keyboard_disconnect: #endif - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/pop_keyboard_buffer.s b/c64/kernal/keyboard/pop_keyboard_buffer.s index 142ceb23..264d0a55 100644 --- a/c64/kernal/keyboard/pop_keyboard_buffer.s +++ b/c64/kernal/keyboard/pop_keyboard_buffer.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // Pop key out of keyboard buffer // Disable interrupts while reading from keyboard buffer @@ -21,6 +23,3 @@ pop_keyboard_buffer: cli rts - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/programmable_keys.s b/c64/kernal/keyboard/programmable_keys.s index 791ca3cf..181914e0 100644 --- a/c64/kernal/keyboard/programmable_keys.s +++ b/c64/kernal/keyboard/programmable_keys.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Command string definitions for programmable keys @@ -124,6 +126,3 @@ programmable_keys_offsets: #endif // CONFIG_PROGRAMMABLE_KEYS - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/scnkey.s b/c64/kernal/keyboard/scnkey.s index 31f44917..003b38e5 100644 --- a/c64/kernal/keyboard/scnkey.s +++ b/c64/kernal/keyboard/scnkey.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -489,6 +491,3 @@ via_keylog: #endif // no CONFIG_LEGACY_SCNKEY - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/scnkey_128.s b/c64/kernal/keyboard/scnkey_128.s index 5243f5f8..48945214 100644 --- a/c64/kernal/keyboard/scnkey_128.s +++ b/c64/kernal/keyboard/scnkey_128.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Keyboard scanning routine extension for C128 keyboards @@ -66,6 +68,3 @@ scnkey_128_no_keys: #endif // CONFIG_KEYBOARD_C128 and no CONFIG_LEGACY_SCNKEY - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/scnkey_65.s b/c64/kernal/keyboard/scnkey_65.s index 5afb8adc..34584b72 100644 --- a/c64/kernal/keyboard/scnkey_65.s +++ b/c64/kernal/keyboard/scnkey_65.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Keyboard scanning routine extension for C65 keyboards @@ -62,8 +64,4 @@ scnkey_65_done: rts - #endif // CONFIG_KEYBOARD_C65 and no CONFIG_LEGACY_SCNKEY - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/scnkey_legacy.s b/c64/kernal/keyboard/scnkey_legacy.s index 50a68480..42dae86f 100644 --- a/c64/kernal/keyboard/scnkey_legacy.s +++ b/c64/kernal/keyboard/scnkey_legacy.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -528,6 +530,3 @@ KeyRepeatWait: #endif // CONFIG_LEGACY_SCNKEY - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/scnkey_set_keytab.s b/c64/kernal/keyboard/scnkey_set_keytab.s index 711b0cdc..c1da0a66 100644 --- a/c64/kernal/keyboard/scnkey_set_keytab.s +++ b/c64/kernal/keyboard/scnkey_set_keytab.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Well-known Kernal routine, described in: @@ -80,6 +82,3 @@ scnkey_toggle_if_needed: // entry for SCNKEY (TWW/CTR version) sta VIC_YMCSB !: rts - - -#endif // ROM layout diff --git a/c64/kernal/keyboard/udtim_keyboard.s b/c64/kernal/keyboard/udtim_keyboard.s index 10fdca11..35d6724a 100644 --- a/c64/kernal/keyboard/udtim_keyboard.s +++ b/c64/kernal/keyboard/udtim_keyboard.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Keyboard part of the UDTIM routine, has to preserve .Y @@ -49,6 +51,3 @@ udtim_keyboard: // unable to, for example, read the space bar status. rts - - -#endif // ROM layout diff --git a/c64/kernal/memory/fd15.restor.s b/c64/kernal/memory/fd15.restor.s index 5e2eaf92..a4a5b106 100644 --- a/c64/kernal/memory/fd15.restor.s +++ b/c64/kernal/memory/fd15.restor.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -23,6 +25,3 @@ VECTOR: // placing it here would cause a collision with VECTOR defaults jmp vector_real - - -#endif // ROM layout diff --git a/c64/kernal/memory/fe25.memtop.s b/c64/kernal/memory/fe25.memtop.s index a5bf1602..53685389 100644 --- a/c64/kernal/memory/fe25.memtop.s +++ b/c64/kernal/memory/fe25.memtop.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -24,6 +26,3 @@ memtop_set: // for compatibility reasons this has to start at $FE2D stx MEMSIZK+0 rts - - -#endif // ROM layout diff --git a/c64/kernal/memory/under_rom_routines.s b/c64/kernal/memory/under_rom_routines.s index a37ca4e7..25de7830 100644 --- a/c64/kernal/memory/under_rom_routines.s +++ b/c64/kernal/memory/under_rom_routines.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // IMPORTANT: // These routines lengths cannot be changed without changing @@ -68,6 +70,3 @@ memmap_allram_routine: __ram_routines_end: #endif // CONFIG_MEMORY_MODEL_60K - - -#endif // ROM layout diff --git a/c64/kernal/memory/vector_real.s b/c64/kernal/memory/vector_real.s index 7c9e62b3..1d5e379b 100644 --- a/c64/kernal/memory/vector_real.s +++ b/c64/kernal/memory/vector_real.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE vector_real: @@ -41,6 +43,3 @@ vector_end_loop: bpl vector_restore rts - - -#endif // ROM layout diff --git a/c64/kernal/panic.s b/c64/kernal/panic.s index c12318e6..aa37b876 100644 --- a/c64/kernal/panic.s +++ b/c64/kernal/panic.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Something terrible happened - show the panic screen @@ -73,6 +75,3 @@ kernal_panic_infinite_loop: bne kernal_panic_infinite_loop // branch always #endif // CONFIG_PANIC_SCREEN - - -#endif // ROM layout diff --git a/c64/kernal/print/print_features.s b/c64/kernal/print/print_features.s index 264d6b68..c4b4c0ae 100644 --- a/c64/kernal/print/print_features.s +++ b/c64/kernal/print/print_features.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Print configured features on startup banner @@ -13,6 +15,3 @@ print_features: jmp print_kernal_message #endif // CONFIG_SHOW_FEATURES - - -#endif // ROM layout diff --git a/c64/kernal/print/print_hex_byte.s b/c64/kernal/print/print_hex_byte.s index 8b940ee2..5bcbbd34 100644 --- a/c64/kernal/print/print_hex_byte.s +++ b/c64/kernal/print/print_hex_byte.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Print the hex value in .A as two digits @@ -49,6 +51,3 @@ print_hex_byte: !: jmp JCHROUT #endif - - -#endif // ROM layout diff --git a/c64/kernal/print/print_kernal_message.s b/c64/kernal/print/print_kernal_message.s index 848308b3..906ee939 100644 --- a/c64/kernal/print/print_kernal_message.s +++ b/c64/kernal/print/print_kernal_message.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Print one of the standard Kernal messages, index in .X @@ -14,6 +16,3 @@ print_kernal_message: bpl !- // 0 marks end of string and #$7F jmp JCHROUT - - -#endif // ROM layout diff --git a/c64/kernal/print/print_pal_ntsc.s b/c64/kernal/print/print_pal_ntsc.s index 06ec137c..d005a63f 100644 --- a/c64/kernal/print/print_pal_ntsc.s +++ b/c64/kernal/print/print_pal_ntsc.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Print video system on startup banner @@ -16,6 +18,3 @@ print_pal_ntsc: jmp print_kernal_message #endif // CONFIG_SHOW_PAL_NTSC - - -#endif // ROM layout diff --git a/c64/kernal/print/print_return.s b/c64/kernal/print/print_return.s index 856f7fdf..f9926e7d 100644 --- a/c64/kernal/print/print_return.s +++ b/c64/kernal/print/print_return.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Print the carriage return @@ -7,6 +9,3 @@ print_return: lda #$0D // carriage return code jmp JCHROUT - - -#endif // ROM layout diff --git a/c64/kernal/print/print_space.s b/c64/kernal/print/print_space.s index 2194d90e..374873f5 100644 --- a/c64/kernal/print/print_space.s +++ b/c64/kernal/print/print_space.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Print the space character @@ -7,6 +9,3 @@ print_space: lda #$20 // space code jmp JCHROUT - - -#endif // ROM layout diff --git a/c64/kernal/print/printf.s b/c64/kernal/print/printf.s index 6c8bba6d..42934867 100644 --- a/c64/kernal/print/printf.s +++ b/c64/kernal/print/printf.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // printf()-like routine for simplifying debugging @@ -142,6 +144,3 @@ printf_retreat: rts #endif // CONFIG_DBG_PRINTF - - -#endif // ROM layout diff --git a/c64/kernal/rom_revision/ff80.kernal_revision.s b/c64/kernal/rom_revision/ff80.kernal_revision.s index 9bdc83c3..74101501 100644 --- a/c64/kernal/rom_revision/ff80.kernal_revision.s +++ b/c64/kernal/rom_revision/ff80.kernal_revision.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // This byte (hex $FF80, dec 65408) identifies Kernal revision on several machines. Although not all @@ -63,6 +65,3 @@ kernal_revision: .byte $F0 // chosen not to conflict with anything known so far - - -#endif // ROM layout diff --git a/c64/kernal/rs232/chkin_rs232_up2400.s b/c64/kernal/rs232/chkin_rs232_up2400.s index 646a4b31..ea8edff1 100644 --- a/c64/kernal/rs232/chkin_rs232_up2400.s +++ b/c64/kernal/rs232/chkin_rs232_up2400.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // RS-232 part of the CHKIN routine @@ -13,6 +15,3 @@ chkin_rs232: #endif // CONFIG_RS232_UP2400 - - -#endif // ROM layout diff --git a/c64/kernal/rs232/chkin_rs232_up9600.s b/c64/kernal/rs232/chkin_rs232_up9600.s index 8072c372..c1ffd6cb 100644 --- a/c64/kernal/rs232/chkin_rs232_up9600.s +++ b/c64/kernal/rs232/chkin_rs232_up9600.s @@ -1,5 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) - +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // RS-232 part of the CHKIN routine @@ -48,6 +49,3 @@ chkin_rs232_nochkin #endif // CONFIG_RS232_UP9600 - - -#endif // ROM layout diff --git a/c64/kernal/rs232/chrin_rs232_up2400.s b/c64/kernal/rs232/chrin_rs232_up2400.s index 4ac6c3dd..d11f6ca2 100644 --- a/c64/kernal/rs232/chrin_rs232_up2400.s +++ b/c64/kernal/rs232/chrin_rs232_up2400.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // RS-232 part of the CHRIN routine @@ -13,6 +15,3 @@ chrin_rs232: #endif // CONFIG_RS232_UP2400 - - -#endif // ROM layout diff --git a/c64/kernal/rs232/chrin_rs232_up9600.s b/c64/kernal/rs232/chrin_rs232_up9600.s index afc6e489..8ada792c 100644 --- a/c64/kernal/rs232/chrin_rs232_up9600.s +++ b/c64/kernal/rs232/chrin_rs232_up9600.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // RS-232 part of the CHRIN routine @@ -42,6 +44,3 @@ XXX_DOGET4: #endif // CONFIG_RS232_UP9600 - - -#endif // ROM layout diff --git a/c64/kernal/rs232/chrout_rs232.s b/c64/kernal/rs232/chrout_rs232.s index 31938cf0..4ed361cf 100644 --- a/c64/kernal/rs232/chrout_rs232.s +++ b/c64/kernal/rs232/chrout_rs232.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // RS-232 part of the CHROUT routine @@ -13,6 +15,3 @@ chrout_rs232: #endif // HAS_RS232 - - -#endif // ROM layout diff --git a/c64/kernal/rs232/ckout_rs232_up2400.s b/c64/kernal/rs232/ckout_rs232_up2400.s index a526891e..40d1c374 100644 --- a/c64/kernal/rs232/ckout_rs232_up2400.s +++ b/c64/kernal/rs232/ckout_rs232_up2400.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // RS-232 part of the CKOUT routine @@ -13,6 +15,3 @@ ckout_rs232: #endif // CONFIG_RS232_UP2400 - - -#endif // ROM layout diff --git a/c64/kernal/rs232/ckout_rs232_up9600.s b/c64/kernal/rs232/ckout_rs232_up9600.s index 4c6a6535..3e36affb 100644 --- a/c64/kernal/rs232/ckout_rs232_up9600.s +++ b/c64/kernal/rs232/ckout_rs232_up9600.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // RS-232 part of the CKOUT routine @@ -22,6 +24,3 @@ ckout_rs232: #endif // CONFIG_RS232_UP9600 - - -#endif // ROM layout diff --git a/c64/kernal/rs232/close_rs232.s b/c64/kernal/rs232/close_rs232.s index c270f473..7a254c8d 100644 --- a/c64/kernal/rs232/close_rs232.s +++ b/c64/kernal/rs232/close_rs232.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // RS-232 part of the CLOSE routine @@ -41,6 +43,3 @@ close_rs232_end: #endif // HAS_RS232 - - -#endif // ROM layout diff --git a/c64/kernal/rs232/getin_rs232.s b/c64/kernal/rs232/getin_rs232.s index b6a01d29..c1b01556 100644 --- a/c64/kernal/rs232/getin_rs232.s +++ b/c64/kernal/rs232/getin_rs232.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // RS-232 part of the GETIN routine @@ -13,6 +15,3 @@ getin_rs232: #endif // HAS_RS232 - - -#endif // ROM layout diff --git a/c64/kernal/rs232/open_rs232.s b/c64/kernal/rs232/open_rs232.s index 864d8487..06c08e65 100644 --- a/c64/kernal/rs232/open_rs232.s +++ b/c64/kernal/rs232/open_rs232.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // RS-232 part of the OPEN routine @@ -59,6 +61,3 @@ open_rs232_end: #endif // HAS_RS232 - - -#endif // ROM layout diff --git a/c64/kernal/rs232/rs232_count_channels.s b/c64/kernal/rs232/rs232_count_channels.s index 1ff4cb8a..49379a81 100644 --- a/c64/kernal/rs232/rs232_count_channels.s +++ b/c64/kernal/rs232/rs232_count_channels.s @@ -1,30 +1,29 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) - -// -// Sets .X to number of open RS-232 channels -// - - -#if HAS_RS232 - - -rs232_count_channels: - - ldx #$00 - ldy LDTND -!: - dey - bmi close_rs232_search_done - lda FAT, y - cmp #$02 - bne !- - inx - bpl !- // branch always - - rts - - -#endif - - -#endif // ROM layout +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + +// +// Sets .X to number of open RS-232 channels +// + + +#if HAS_RS232 + + +rs232_count_channels: + + ldx #$00 + ldy LDTND +!: + dey + bmi close_rs232_search_done + lda FAT, y + cmp #$02 + bne !- + inx + bpl !- // branch always + + rts + + +#endif diff --git a/c64/kernal/rs232/up9600_disable.s b/c64/kernal/rs232/up9600_disable.s index 603a246f..44d6691f 100644 --- a/c64/kernal/rs232/up9600_disable.s +++ b/c64/kernal/rs232/up9600_disable.s @@ -1,48 +1,46 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) - -// -// Disable UP9600 interface -// - -// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations - - -#if CONFIG_RS232_UP9600 - - -up9600_disable: // XXX adapt - - // XXX restore interrupt vectors and IRQ timer - - sei - lda CIA2_PRB // $DD01; DISABLE RTS - and #$FD - sta CIA2_PRB // $DD01 - lda #$7F - sta CIA2_ICR // $DD0D ; DISABLE ALL CIA INTERRUPTS - sta CIA1_ICR // $DC0D - lda #$41; QUICK (AND DIRTY) HACK TO SWITCH BACK - sta CIA1_TIMAHI // $DC05 ; TO THE DEFAULT CIA1 CONFIGURATION - lda #$81 - sta CIA1_ICR // $DC0D ; ENABLE TIMER1 (THIS IS DEFAULT) - lda #ORIGIRQ - sta IRQVECT+1 - lda #ORIGNMI - sta NMIVECT+1 - cli - pla - tay - pla - tax - pla - - - -#endif // CONFIG_RS232_UP9600 - - -#endif // ROM layout +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + +// +// Disable UP9600 interface +// + +// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations + + +#if CONFIG_RS232_UP9600 + + +up9600_disable: // XXX adapt + + // XXX restore interrupt vectors and IRQ timer + + sei + lda CIA2_PRB // $DD01; DISABLE RTS + and #$FD + sta CIA2_PRB // $DD01 + lda #$7F + sta CIA2_ICR // $DD0D ; DISABLE ALL CIA INTERRUPTS + sta CIA1_ICR // $DC0D + lda #$41; QUICK (AND DIRTY) HACK TO SWITCH BACK + sta CIA1_TIMAHI // $DC05 ; TO THE DEFAULT CIA1 CONFIGURATION + lda #$81 + sta CIA1_ICR // $DC0D ; ENABLE TIMER1 (THIS IS DEFAULT) + lda #ORIGIRQ + sta IRQVECT+1 + lda #ORIGNMI + sta NMIVECT+1 + cli + pla + tay + pla + tax + pla + + +#endif // CONFIG_RS232_UP9600 diff --git a/c64/kernal/rs232/up9600_enable.s b/c64/kernal/rs232/up9600_enable.s index 96a1e893..2f9be6db 100644 --- a/c64/kernal/rs232/up9600_enable.s +++ b/c64/kernal/rs232/up9600_enable.s @@ -1,135 +1,134 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) - -// -// Enable UP9600 interface support -// - -// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations - - -#if CONFIG_RS232_UP9600 - - -up9600_enable: // XXX adapt - - sei - - - - lda IRQVECT - cmp #ORIGIRQ - bne INSTERR; IRQ-VECTOR ALREADY CHANGED - lda NMIVECT - cmp #ORIGNMI - bne INSTERR; NMI-VECTOR ALREADY CHANGED - ldy #0 - sty RODBE - sty RODBS - sty RIDBE - sty RIDBS - ; PROBE FOR RS232 INTERFACE - cli - lda #$7F - sta CIA2_ICR // $DD0D ; DISABLE ALL NMIS - lda #$80 - sta CIA2_DDRB // $DD03 ; PB7 USED AS OUTPUT - sta $DD0E; STOP TIMERA - sta CIA2_CRB // $DD0F ; STOP TIMERB - bit CIA2_ICR // $DD0D ; CLEAR PENDING INTERRUPTS - ldx #8 -INSTALL2 - stx CIA2_PRB // $DD01; TOGGLE TXD - sta CIA2_PRB // $DD01; AND LOOK IF IT TRIGGERS AN - dex; SHIFT-REGISTER INTERRUPT - bne INSTALL2 - lda CIA2_ICR // $DD0D ; CHECK FOR BIT3 (SDR-FLAG) - and #8 - beq INSTERR; NO INTERFACE DETECTED - ; GENERATE LOOKUP TABLE - ldx #0 -INSTALL3 - stx OUTSTAT; OUTSTAT USED AS TEMPORARY VARIABLE - ldy #8 -INSTALL4 - asl OUTSTAT - ror - dey - bne INSTALL4 - sta REVTAB,X - inx - bpl INSTALL3 - - - - - - sei - // XXX set NEWIRQ as IRQ vector - // XXX set NMIDOBIT as NMI vector - - ldx TVSFLG; PAL OR NTSC VERSION PRINT - lda ILOTAB,X; (KEYSCAN INTERRUPT ONCE EVERY 1/64 SECOND) - sta CIA1_TIMBLO // $DC06 ; (SORRY THIS WILL BREAK CODE, THAT USES - lda IHITAB,X; THE TI$ - VARIABLE) - sta CIA1_TIMBHI // $DC07 ; START VALUE FOR TIMER B (OF CIA1) - txa - asl - eor #$33; ** TIME CONSTANT FOR SENDER ** - ldx #0; 51 OR 55 DEPENDING ON PAL/NTSC VERSION - sta CIA1_TIMALO // $DC04 ; START VALUE FOR TIMERA (OF CIA1) - stx CIA1_TIMAHI // $DC05 ; (TIME IS AROUND 1/(2*BAUDRATE) ) - asl; ** TIME CONSTANT FOR RECEIVER ** - ora #1; 103 OR 111 DEPENDING ON PAL/NTSC VERSION - sta CIA2_TIMBLO // $DD06 ; START VALUE FOR TIMERB (OF CIA2) - stx CIA2_TIMBHI // $DD07 ; (TIME IS AROUND 1/BAUDRATE ) - lda #$41; START TIMERA OF CIA1, SP1 USED AS OUTPUT - sta CIA1_CRA // $DC0E ; GENERATES THE SENDER'S BIT CLOCK - lda #1 - sta OUTSTAT - sta CIA1_ICR // $DC0D ; DISABLE TIMERA (CIA1) INTERRUPT - sta CIA1_CRB // $DC0F ; START TIMERB OF CIA1 (GENERATES KEYSCAN IRQ) - lda #$92; STOP TIMERB OF CIA2 (ENABLE SIGNAL AT PB7) - sta CIA2_CRB // $DD0F - lda #$98 - bit CIA2_ICR // $DD0D ; CLEAR PENDING NMIS - sta CIA2_ICR // $DD0D ; ENABLE NMI (SDR AND FLAG) (CIA2) - lda #$8A - sta CIA1_ICR // $DC0D ; ENABLE IRQ (TIMERB AND SDR) (CIA1) - lda #$FF - sta CIA2_PRB // $DD01; PB0-7 DEFAULT TO 1 - sta CIA1_SDR // $DC0C ; SP1 DEFAULTS TO 1 - sec - lda RIDBE - sbc RIDBS - cmp #200 - bcc ENABLE2;; DON'T ENABLE RTS IF REC-BUFFER IS FULL - lda #2;; ENABLE RTS - sta CIA2_DDRB // $DD03 ;; (THE RTS LINE IS THE ONLY OUTPUT) -ENABLE2 - cli - pla - tay - pla - tax - pla - rts - - - - -INSTERR - cli - sec - rts - - -#endif // CONFIG_RS232_UP9600 - - -#endif // ROM layout \ No newline at end of file +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + +// +// Enable UP9600 interface support +// + +// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations + + +#if CONFIG_RS232_UP9600 + + +up9600_enable: // XXX adapt + + sei + + + + lda IRQVECT + cmp #ORIGIRQ + bne INSTERR; IRQ-VECTOR ALREADY CHANGED + lda NMIVECT + cmp #ORIGNMI + bne INSTERR; NMI-VECTOR ALREADY CHANGED + ldy #0 + sty RODBE + sty RODBS + sty RIDBE + sty RIDBS + ; PROBE FOR RS232 INTERFACE + cli + lda #$7F + sta CIA2_ICR // $DD0D ; DISABLE ALL NMIS + lda #$80 + sta CIA2_DDRB // $DD03 ; PB7 USED AS OUTPUT + sta $DD0E; STOP TIMERA + sta CIA2_CRB // $DD0F ; STOP TIMERB + bit CIA2_ICR // $DD0D ; CLEAR PENDING INTERRUPTS + ldx #8 +INSTALL2 + stx CIA2_PRB // $DD01; TOGGLE TXD + sta CIA2_PRB // $DD01; AND LOOK IF IT TRIGGERS AN + dex; SHIFT-REGISTER INTERRUPT + bne INSTALL2 + lda CIA2_ICR // $DD0D ; CHECK FOR BIT3 (SDR-FLAG) + and #8 + beq INSTERR; NO INTERFACE DETECTED + ; GENERATE LOOKUP TABLE + ldx #0 +INSTALL3 + stx OUTSTAT; OUTSTAT USED AS TEMPORARY VARIABLE + ldy #8 +INSTALL4 + asl OUTSTAT + ror + dey + bne INSTALL4 + sta REVTAB,X + inx + bpl INSTALL3 + + + + + + sei + // XXX set NEWIRQ as IRQ vector + // XXX set NMIDOBIT as NMI vector + + ldx TVSFLG; PAL OR NTSC VERSION PRINT + lda ILOTAB,X; (KEYSCAN INTERRUPT ONCE EVERY 1/64 SECOND) + sta CIA1_TIMBLO // $DC06 ; (SORRY THIS WILL BREAK CODE, THAT USES + lda IHITAB,X; THE TI$ - VARIABLE) + sta CIA1_TIMBHI // $DC07 ; START VALUE FOR TIMER B (OF CIA1) + txa + asl + eor #$33; ** TIME CONSTANT FOR SENDER ** + ldx #0; 51 OR 55 DEPENDING ON PAL/NTSC VERSION + sta CIA1_TIMALO // $DC04 ; START VALUE FOR TIMERA (OF CIA1) + stx CIA1_TIMAHI // $DC05 ; (TIME IS AROUND 1/(2*BAUDRATE) ) + asl; ** TIME CONSTANT FOR RECEIVER ** + ora #1; 103 OR 111 DEPENDING ON PAL/NTSC VERSION + sta CIA2_TIMBLO // $DD06 ; START VALUE FOR TIMERB (OF CIA2) + stx CIA2_TIMBHI // $DD07 ; (TIME IS AROUND 1/BAUDRATE ) + lda #$41; START TIMERA OF CIA1, SP1 USED AS OUTPUT + sta CIA1_CRA // $DC0E ; GENERATES THE SENDER'S BIT CLOCK + lda #1 + sta OUTSTAT + sta CIA1_ICR // $DC0D ; DISABLE TIMERA (CIA1) INTERRUPT + sta CIA1_CRB // $DC0F ; START TIMERB OF CIA1 (GENERATES KEYSCAN IRQ) + lda #$92; STOP TIMERB OF CIA2 (ENABLE SIGNAL AT PB7) + sta CIA2_CRB // $DD0F + lda #$98 + bit CIA2_ICR // $DD0D ; CLEAR PENDING NMIS + sta CIA2_ICR // $DD0D ; ENABLE NMI (SDR AND FLAG) (CIA2) + lda #$8A + sta CIA1_ICR // $DC0D ; ENABLE IRQ (TIMERB AND SDR) (CIA1) + lda #$FF + sta CIA2_PRB // $DD01; PB0-7 DEFAULT TO 1 + sta CIA1_SDR // $DC0C ; SP1 DEFAULTS TO 1 + sec + lda RIDBE + sbc RIDBS + cmp #200 + bcc ENABLE2;; DON'T ENABLE RTS IF REC-BUFFER IS FULL + lda #2;; ENABLE RTS + sta CIA2_DDRB // $DD03 ;; (THE RTS LINE IS THE ONLY OUTPUT) +ENABLE2 + cli + pla + tay + pla + tax + pla + rts + + + + +INSTERR + cli + sec + rts + + +#endif // CONFIG_RS232_UP9600 diff --git a/c64/kernal/rs232/up9600_ihitab.s b/c64/kernal/rs232/up9600_ihitab.s index c0eb5793..43b53bd7 100644 --- a/c64/kernal/rs232/up9600_ihitab.s +++ b/c64/kernal/rs232/up9600_ihitab.s @@ -1,22 +1,21 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) - -// -// Timer values for PAL/NTSC - high bytes -// - -// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations - - -#if CONFIG_RS232_UP9600 - - -up9600_ihitab: - - .byte $42 - .byte $40 - - -#endif // CONFIG_RS232_UP9600 - - -#endif // ROM layout +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + +// +// Timer values for PAL/NTSC - high bytes +// + +// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations + + +#if CONFIG_RS232_UP9600 + + +up9600_ihitab: + + .byte $42 + .byte $40 + + +#endif // CONFIG_RS232_UP9600 diff --git a/c64/kernal/rs232/up9600_ilotab.s b/c64/kernal/rs232/up9600_ilotab.s index e6fbf3a0..5492bedf 100644 --- a/c64/kernal/rs232/up9600_ilotab.s +++ b/c64/kernal/rs232/up9600_ilotab.s @@ -1,22 +1,21 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) - -// -// Timer values for PAL/NTSC - low bytes -// - -// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations - - -#if CONFIG_RS232_UP9600 - - -up9600_ilotab: - - .byte $95 - .byte $25 - - -#endif // CONFIG_RS232_UP9600 - - -#endif // ROM layout +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + +// +// Timer values for PAL/NTSC - low bytes +// + +// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations + + +#if CONFIG_RS232_UP9600 + + +up9600_ilotab: + + .byte $95 + .byte $25 + + +#endif // CONFIG_RS232_UP9600 diff --git a/c64/kernal/rs232/up9600_irq.s b/c64/kernal/rs232/up9600_irq.s index f6dc79ac..b7e0be2a 100644 --- a/c64/kernal/rs232/up9600_irq.s +++ b/c64/kernal/rs232/up9600_irq.s @@ -1,44 +1,43 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) - -// -// RS-232 IRQ handler part -// - -// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations - - -#if CONFIG_RS232_UP9600 - - -up9600_irq: - - lda CIA1_ICR // $DC0D - - lsr - lsr // move bit 1 (timer B flag) into Carry - and #$02 // test SDR (shift register) status - - beq up9600_irq_continue - - ldx RINONE - beq !+ // skip if not waiting for empty SDR - dex - stx RINONE -!: - bcc up9600_irq_end - -up9600_irq_continue: - - rts - -up9600_irq_end: - - pla - pla - jmp return_from_interrupt - - -#endif // CONFIG_RS232_UP9600 - - -#endif // ROM layout +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + +// +// RS-232 IRQ handler part +// + +// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations + + +#if CONFIG_RS232_UP9600 + + +up9600_irq: + + lda CIA1_ICR // $DC0D + + lsr + lsr // move bit 1 (timer B flag) into Carry + and #$02 // test SDR (shift register) status + + beq up9600_irq_continue + + ldx RINONE + beq !+ // skip if not waiting for empty SDR + dex + stx RINONE +!: + bcc up9600_irq_end + +up9600_irq_continue: + + rts + +up9600_irq_end: + + pla + pla + jmp return_from_interrupt + + +#endif // CONFIG_RS232_UP9600 diff --git a/c64/kernal/rs232/up9600_nmi.s b/c64/kernal/rs232/up9600_nmi.s index c9945ed3..ffe35c36 100644 --- a/c64/kernal/rs232/up9600_nmi.s +++ b/c64/kernal/rs232/up9600_nmi.s @@ -1,70 +1,69 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) - -// -// RS-232 NMI handler part -// - -// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations - - -#if CONFIG_RS232_UP9600 - - -up9600_nmi: - // XXX integrate with NMI handler - - pha - bit CIA2_ICR // $DD0D; check if CIA caused the interrupt - bpl NMIDOBI2; NO STARTBIT RECEIVED, THEN SKIP - lda #$13 - sta CIA2_CRB // $DD0F; START TIMER B (FORCED RELOAD, SIGNAL AT PB7) - sta CIA2_ICR // $DD0D; DISABLE TIMER AND FLAG INTERRUPTS - lda #NMIBYTRY - sta NMIVECT+1 -NMIDOBI2 - pla; IGNORE, IF NMI WAS TRIGGERED BY RESTORE-KEY - rti - ; -NMIBYTRY - pha - bit CIA2_ICR // $DD0D; CHECK BIT 7 (SDR FULL PRINT) - bpl NMIDOBI2; SDR NOT FULL, THEN SKIP (EG. RESTORE-KEY) - lda #$92 - sta CIA2_CRB // $DD0F; STOP TIMER B (KEEP SIGNALLING AT PB7!) - sta CIA2_ICR // $DD0D; ENABLE FLAG (AND TIMER) INTERRUPTS - lda #NMIDOBIT - sta NMIVECT+1 - phx_trash_a - phy_trash_a - lda CIA2_SDR // $DD0C; READ SDR (BIT0=DATABIT7,...,BIT7=DATABIT0) - cmp #128; MOVE BIT7 INTO CARRY-FLAG - and #127 - tax - lda REVTAB,X; READ DATABITS 1-7 FROM LOOKUP TABLE - adc #0; ADD DATABIT0 - ldy RIDBE; AND WRITE IT INTO THE RECEIVE BUFFER - sta (RIBUF),Y - iny - sty RIDBE - sec;;START BUFFER FULL CHK - tya - sbc RIDBS - cmp #200 - bcc NMIBYTR2 - lda CIA2_PRB // $DD01;; MORE THAN 200 BYTES IN THE RECEIVE BUFFER - and #$FD;; THEN DISABLE RTS - sta CIA2_PRB // $DD01 -NMIBYTR2 - ply_trash_a - plx_trash_a - pla - rti - -#endif // CONFIG_RS232_UP9600 - - -#endif // ROM layout +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + +// +// RS-232 NMI handler part +// + +// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations + + +#if CONFIG_RS232_UP9600 + + +up9600_nmi: + // XXX integrate with NMI handler + + pha + bit CIA2_ICR // $DD0D; check if CIA caused the interrupt + bpl NMIDOBI2; NO STARTBIT RECEIVED, THEN SKIP + lda #$13 + sta CIA2_CRB // $DD0F; START TIMER B (FORCED RELOAD, SIGNAL AT PB7) + sta CIA2_ICR // $DD0D; DISABLE TIMER AND FLAG INTERRUPTS + lda #NMIBYTRY + sta NMIVECT+1 +NMIDOBI2 + pla; IGNORE, IF NMI WAS TRIGGERED BY RESTORE-KEY + rti + ; +NMIBYTRY + pha + bit CIA2_ICR // $DD0D; CHECK BIT 7 (SDR FULL PRINT) + bpl NMIDOBI2; SDR NOT FULL, THEN SKIP (EG. RESTORE-KEY) + lda #$92 + sta CIA2_CRB // $DD0F; STOP TIMER B (KEEP SIGNALLING AT PB7!) + sta CIA2_ICR // $DD0D; ENABLE FLAG (AND TIMER) INTERRUPTS + lda #NMIDOBIT + sta NMIVECT+1 + phx_trash_a + phy_trash_a + lda CIA2_SDR // $DD0C; READ SDR (BIT0=DATABIT7,...,BIT7=DATABIT0) + cmp #128; MOVE BIT7 INTO CARRY-FLAG + and #127 + tax + lda REVTAB,X; READ DATABITS 1-7 FROM LOOKUP TABLE + adc #0; ADD DATABIT0 + ldy RIDBE; AND WRITE IT INTO THE RECEIVE BUFFER + sta (RIBUF),Y + iny + sty RIDBE + sec;;START BUFFER FULL CHK + tya + sbc RIDBS + cmp #200 + bcc NMIBYTR2 + lda CIA2_PRB // $DD01;; MORE THAN 200 BYTES IN THE RECEIVE BUFFER + and #$FD;; THEN DISABLE RTS + sta CIA2_PRB // $DD01 +NMIBYTR2 + ply_trash_a + plx_trash_a + pla + rti + +#endif // CONFIG_RS232_UP9600 diff --git a/c64/kernal/rs232/up9600_rsin.s b/c64/kernal/rs232/up9600_rsin.s index 8151d338..67cb5f93 100644 --- a/c64/kernal/rs232/up9600_rsin.s +++ b/c64/kernal/rs232/up9600_rsin.s @@ -1,47 +1,46 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) - -// -// Get byte from serial interface -// - -// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations - - -#if CONFIG_RS232_UP9600 - - -up9600_rsin: - - ldy RIDBS - cpy RIDBE - beq up9600_rsin_end; // skip (empty buffer, return with carry set) - - lda (RIBUF),Y - iny - sty RIDBS - pha // begin buffer emptying chk - tya - sec - sbc RIDBE - cmp #206 // 256-50 - bcc !+ - lda #$02 - ora CIA2_PR // $DD01 - sta CIA2_PR // enable RTS - clc - - // FALLTROUGH - -!: - pla - - // FALLTROUGH - -up9600_rsin_end: - - rts - -#endif // CONFIG_RS232_UP9600 - - -#endif // ROM layout +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + +// +// Get byte from serial interface +// + +// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations + + +#if CONFIG_RS232_UP9600 + + +up9600_rsin: + + ldy RIDBS + cpy RIDBE + beq up9600_rsin_end; // skip (empty buffer, return with carry set) + + lda (RIBUF),Y + iny + sty RIDBS + pha // begin buffer emptying chk + tya + sec + sbc RIDBE + cmp #206 // 256-50 + bcc !+ + lda #$02 + ora CIA2_PR // $DD01 + sta CIA2_PR // enable RTS + clc + + // FALLTROUGH + +!: + pla + + // FALLTROUGH + +up9600_rsin_end: + + rts + +#endif // CONFIG_RS232_UP9600 diff --git a/c64/kernal/rs232/up9600_rsout.s b/c64/kernal/rs232/up9600_rsout.s index 93b847e8..0efed7f4 100644 --- a/c64/kernal/rs232/up9600_rsout.s +++ b/c64/kernal/rs232/up9600_rsout.s @@ -1,60 +1,59 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) - -// -// Put byte to serial interface -// - -// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations - - -#if CONFIG_RS232_UP9600 - - -up9600_rsout: - - pha - sta $9E // XXX synchronize with aliases - cmp #$80 - and #$7F - stx $A8 // XXX synchronize with aliases - sty $A7 // XXX synchronize with aliases - tax - jsr up9600_rsout_time - - lda REVTAB, x - adc #$00 - lsr - sei - sta CIA1_SDR // $DC0C - lda #$02 - STA XXX_OUTSTAT - ror - ora #$7F - sta CIA1_SDR // $DC0C - cli - ldx $A8 // XXX synchronize with aliases - ldy $A7 // XXX synchronize with aliases - pla - rts - -up9600_rsout_time: - - cli - lda #$FD - sta TIME+2 // XXX check if this is the lowest byte - -rs232_rsout_wait: - - lda XXX_OUTSTAT - beq !+ - bit TIME+2 - bmi up9600_rsout_wait - -!: - jmp $F490 // XXX - - -#endif // CONFIG_RS232_UP9600 - - -#endif // ROM layout +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + +// +// Put byte to serial interface +// + +// Based on UP9600 code by Daniel Dallman with Bo Zimmerman adaptations + + +#if CONFIG_RS232_UP9600 + + +up9600_rsout: + + pha + sta $9E // XXX synchronize with aliases + cmp #$80 + and #$7F + stx $A8 // XXX synchronize with aliases + sty $A7 // XXX synchronize with aliases + tax + jsr up9600_rsout_time + + lda REVTAB, x + adc #$00 + lsr + sei + sta CIA1_SDR // $DC0C + lda #$02 + STA XXX_OUTSTAT + ror + ora #$7F + sta CIA1_SDR // $DC0C + cli + ldx $A8 // XXX synchronize with aliases + ldy $A7 // XXX synchronize with aliases + pla + rts + +up9600_rsout_time: + + cli + lda #$FD + sta TIME+2 // XXX check if this is the lowest byte + +rs232_rsout_wait: + + lda XXX_OUTSTAT + beq !+ + bit TIME+2 + bmi up9600_rsout_wait + +!: + jmp $F490 // XXX + + +#endif // CONFIG_RS232_UP9600 diff --git a/c64/kernal/screen/chrout_screen.s b/c64/kernal/screen/chrout_screen.s index 7886c080..356816d0 100644 --- a/c64/kernal/screen/chrout_screen.s +++ b/c64/kernal/screen/chrout_screen.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // CHROUT routine - screen support (character output) @@ -128,6 +130,3 @@ chrout_screen_done: jsr cursor_show_if_enabled jmp chrout_done_success - - -#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_clr.s b/c64/kernal/screen/chrout_screen_clr.s index 3f3d2599..7da09ca6 100644 --- a/c64/kernal/screen/chrout_screen_clr.s +++ b/c64/kernal/screen/chrout_screen_clr.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // CLR key handling within CHROUT @@ -9,6 +11,3 @@ chrout_screen_CLR: jsr clear_screen jmp chrout_screen_calc_lptr_done - - -#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_control.s b/c64/kernal/screen/chrout_screen_control.s index ad5cd563..7f93c521 100644 --- a/c64/kernal/screen/chrout_screen_control.s +++ b/c64/kernal/screen/chrout_screen_control.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // CHROUT routine - screen support, control codes @@ -67,6 +69,3 @@ chrout_try_color_loop: // Unknown code, or key not requiring any handling jmp chrout_screen_done - - -#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_crsr.s b/c64/kernal/screen/chrout_screen_crsr.s index 9a076b44..cb276f41 100644 --- a/c64/kernal/screen/chrout_screen_crsr.s +++ b/c64/kernal/screen/chrout_screen_crsr.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Cursor keys handling within CHROUT @@ -54,6 +56,3 @@ chrout_screen_CRSR_LEFT: lda #39 sta PNTR bne chrout_screen_CRSR_done // branch always - - -#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_del.s b/c64/kernal/screen/chrout_screen_del.s index 4bb659cf..5cfaaa07 100644 --- a/c64/kernal/screen/chrout_screen_del.s +++ b/c64/kernal/screen/chrout_screen_del.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // CHROUT routine - screen support, DEL key handling @@ -116,6 +118,3 @@ chrout_screen_del_column_0: // Finish with recalculating all the variables bne chrout_screen_del_done - - -#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_gfxtxt.s b/c64/kernal/screen/chrout_screen_gfxtxt.s index f1e8486e..9f326e43 100644 --- a/c64/kernal/screen/chrout_screen_gfxtxt.s +++ b/c64/kernal/screen/chrout_screen_gfxtxt.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // GFX/TXT mode switch handling within CHROUT @@ -18,6 +20,3 @@ chrout_screen_TXT: lda VIC_YMCSB ora #$02 // to lower case bne !- // branch always - - -#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_home.s b/c64/kernal/screen/chrout_screen_home.s index 6dc1c559..4f0e3d05 100644 --- a/c64/kernal/screen/chrout_screen_home.s +++ b/c64/kernal/screen/chrout_screen_home.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // HOME key handling within CHROUT @@ -9,6 +11,3 @@ chrout_screen_HOME: jsr cursor_home jmp chrout_screen_calc_lptr_done - - -#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_ins.s b/c64/kernal/screen/chrout_screen_ins.s index f191564c..74be6b2a 100644 --- a/c64/kernal/screen/chrout_screen_ins.s +++ b/c64/kernal/screen/chrout_screen_ins.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // CHROUT routine - screen support, INS key handling @@ -92,6 +94,3 @@ chrout_screen_ins_copy_loop: // Return from loop rts - - -#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_jumptable_codes.s b/c64/kernal/screen/chrout_screen_jumptable_codes.s index 4281f0fc..4e494b4d 100644 --- a/c64/kernal/screen/chrout_screen_jumptable_codes.s +++ b/c64/kernal/screen/chrout_screen_jumptable_codes.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Jumptable for screen control codes support. To improve performance, should be sorted @@ -121,6 +123,3 @@ chrout_screen_jumptable: .if (mod(*, $2) == 0) { nop } // make sure routine size is always the same, needed by build system #endif - - -#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_quote.s b/c64/kernal/screen/chrout_screen_quote.s index 1ddd0c64..8bbe2440 100644 --- a/c64/kernal/screen/chrout_screen_quote.s +++ b/c64/kernal/screen/chrout_screen_quote.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // CHROUT routine - screen support, control codes in quote mode @@ -19,6 +21,3 @@ chrout_screen_quote: adc #$BF // C=1, so adding $BF + C = add $C0 !: jmp chrout_screen_literal - - -#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_return.s b/c64/kernal/screen/chrout_screen_return.s index 40af4342..4148dda6 100644 --- a/c64/kernal/screen/chrout_screen_return.s +++ b/c64/kernal/screen/chrout_screen_return.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // RETURN key handling within CHROUT @@ -28,6 +30,3 @@ chrout_screen_RETURN: jsr screen_calculate_PNT_USER !: jmp screen_advance_to_next_line - - -#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_rvs.s b/c64/kernal/screen/chrout_screen_rvs.s index 283c2649..3cb679ae 100644 --- a/c64/kernal/screen/chrout_screen_rvs.s +++ b/c64/kernal/screen/chrout_screen_rvs.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // RVS ON/OFF handling within CHROUT @@ -16,6 +18,3 @@ chrout_screen_RVS_OFF: !: sta RVS jmp chrout_screen_done - - -#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_shift_onoff.s b/c64/kernal/screen/chrout_screen_shift_onoff.s index b0e0ca57..7ecbbe2a 100644 --- a/c64/kernal/screen/chrout_screen_shift_onoff.s +++ b/c64/kernal/screen/chrout_screen_shift_onoff.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // SHIFT ON/OFF handling within CHROUT @@ -16,6 +18,3 @@ chrout_screen_SHIFT_OFF: lda #$80 // disable SHIFT+VENDOR combination bne !- // branch always - - -#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_stop.s b/c64/kernal/screen/chrout_screen_stop.s index 7a96d3e1..3c638032 100644 --- a/c64/kernal/screen/chrout_screen_stop.s +++ b/c64/kernal/screen/chrout_screen_stop.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // STOP key handling within CHROUT @@ -17,6 +19,3 @@ chrout_screen_STOP: #endif - - -#endif // ROM layout diff --git a/c64/kernal/screen/chrout_screen_tab.s b/c64/kernal/screen/chrout_screen_tab.s index f07e8d61..13634dc9 100644 --- a/c64/kernal/screen/chrout_screen_tab.s +++ b/c64/kernal/screen/chrout_screen_tab.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Tabulation keys handling within CHROUT @@ -38,6 +40,3 @@ chrout_screen_TAB_BW: #endif // CONFIG_EDIT_TABULATORS - - -#endif // ROM layout diff --git a/c64/kernal/screen/cursor.s b/c64/kernal/screen/cursor.s index f901e91a..15b460d2 100644 --- a/c64/kernal/screen/cursor.s +++ b/c64/kernal/screen/cursor.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Variables used: @@ -79,6 +81,3 @@ cursor_blink_timer_reset: cursor_blink_end: rts - - -#endif // ROM layout diff --git a/c64/kernal/screen/cursor_enable.s b/c64/kernal/screen/cursor_enable.s index 9ea0c8ca..155f28b4 100644 --- a/c64/kernal/screen/cursor_enable.s +++ b/c64/kernal/screen/cursor_enable.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Variables used: @@ -7,9 +9,7 @@ cursor_enable: + lda #$00 sta BLNSW rts - - -#endif // ROM layout diff --git a/c64/kernal/screen/cursor_show.s b/c64/kernal/screen/cursor_show.s index 2e66f5bf..e96987aa 100644 --- a/c64/kernal/screen/cursor_show.s +++ b/c64/kernal/screen/cursor_show.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Variables used: @@ -34,6 +36,3 @@ cursor_show: cursor_show_end: rts - - -#endif // ROM layout diff --git a/c64/kernal/screen/e50a.plot.s b/c64/kernal/screen/e50a.plot.s index b3d9439b..e42d76c0 100644 --- a/c64/kernal/screen/e50a.plot.s +++ b/c64/kernal/screen/e50a.plot.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -33,6 +35,3 @@ plot_get: ldy PNTR ldx TBLX rts - - -#endif // ROM layout diff --git a/c64/kernal/screen/e544.clear_screen.s b/c64/kernal/screen/e544.clear_screen.s index affc4f5f..e80029ca 100644 --- a/c64/kernal/screen/e544.clear_screen.s +++ b/c64/kernal/screen/e544.clear_screen.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Clear screen and initialise line link table, described in: @@ -29,6 +31,3 @@ clear_screen: // Fall to cursor home routine jmp cursor_home - - -#endif // ROM layout diff --git a/c64/kernal/screen/e566.cursor_home.s b/c64/kernal/screen/e566.cursor_home.s index b66ffb7c..0e22fe78 100644 --- a/c64/kernal/screen/e566.cursor_home.s +++ b/c64/kernal/screen/e566.cursor_home.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Home the cursor, described in: @@ -14,6 +16,3 @@ cursor_home: sta TBLX // current row // FALLTROUGH to the next routine - - -#endif // ROM layout diff --git a/c64/kernal/screen/e56c.screen_calculate_pointers.s b/c64/kernal/screen/e56c.screen_calculate_pointers.s index b82cdb47..591862c6 100644 --- a/c64/kernal/screen/e56c.screen_calculate_pointers.s +++ b/c64/kernal/screen/e56c.screen_calculate_pointers.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Set pointer (PNT) to current screen line , described in: @@ -14,6 +16,3 @@ screen_calculate_pointers: jsr screen_calculate_PNT_USER jmp screen_calculate_PNTR_LNMX - - -#endif // ROM layout diff --git a/c64/kernal/screen/e8ea.screen_scroll_up.s b/c64/kernal/screen/e8ea.screen_scroll_up.s index 169a0783..fb3f262e 100644 --- a/c64/kernal/screen/e8ea.screen_scroll_up.s +++ b/c64/kernal/screen/e8ea.screen_scroll_up.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Scroll the whole screen up by 1 logical line, described in: @@ -129,6 +131,3 @@ screen_scroll_up_loop_done: // Recalculate PNT and USER jmp screen_calculate_PNT_USER - - -#endif // ROM layout diff --git a/c64/kernal/screen/e9ff.screen_clear_line.s b/c64/kernal/screen/e9ff.screen_clear_line.s index 049b5a60..6dc1f915 100644 --- a/c64/kernal/screen/e9ff.screen_clear_line.s +++ b/c64/kernal/screen/e9ff.screen_clear_line.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Well-known routine, described in: @@ -33,6 +35,3 @@ screen_clear_line: // Done rts - - -#endif // ROM layout diff --git a/c64/kernal/screen/screen.s b/c64/kernal/screen/screen.s index 1f2a4ec6..2d3611df 100644 --- a/c64/kernal/screen/screen.s +++ b/c64/kernal/screen/screen.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -19,5 +21,3 @@ SCREEN: ldx #40 // 40 rows rts - -#endif // ROM layout diff --git a/c64/kernal/screen/screen_advance_to_next_line.s b/c64/kernal/screen/screen_advance_to_next_line.s index 73b0528c..c711e292 100644 --- a/c64/kernal/screen/screen_advance_to_next_line.s +++ b/c64/kernal/screen/screen_advance_to_next_line.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE screen_advance_to_next_line: @@ -18,6 +20,3 @@ screen_advance_to_next_line: sta PNTR jmp chrout_screen_calc_lptr_done - - -#endif // ROM layout diff --git a/c64/kernal/screen/screen_calculate_pnt_user.s b/c64/kernal/screen/screen_calculate_pnt_user.s index 0e454f13..ce477aa3 100644 --- a/c64/kernal/screen/screen_calculate_pnt_user.s +++ b/c64/kernal/screen/screen_calculate_pnt_user.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Set pointers PNT and USER to current screen line @@ -51,6 +53,3 @@ screen_calculate_USER: sta USER+1 rts - - -#endif // ROM layout diff --git a/c64/kernal/screen/screen_calculate_pntr_lnmx.s b/c64/kernal/screen/screen_calculate_pntr_lnmx.s index b97e9251..7b4e7f5f 100644 --- a/c64/kernal/screen/screen_calculate_pntr_lnmx.s +++ b/c64/kernal/screen/screen_calculate_pntr_lnmx.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Sets PNTR in a proper range (0-39 or 40-79) @@ -59,6 +61,3 @@ screen_calculate_lnmx_79: lda #79 sta LNMX rts - - -#endif // ROM layout diff --git a/c64/kernal/screen/screen_check_space_ends_line.s b/c64/kernal/screen/screen_check_space_ends_line.s index 59cb427c..a482dc9e 100644 --- a/c64/kernal/screen/screen_check_space_ends_line.s +++ b/c64/kernal/screen/screen_check_space_ends_line.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE screen_check_space_ends_line: @@ -9,6 +11,3 @@ screen_check_space_ends_line: cmp #$20 rts - - -#endif // ROM layout diff --git a/c64/kernal/screen/screen_code_to_petscii.s b/c64/kernal/screen/screen_code_to_petscii.s index 883afe85..7a76aae3 100644 --- a/c64/kernal/screen/screen_code_to_petscii.s +++ b/c64/kernal/screen/screen_code_to_petscii.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE screen_code_to_petscii: @@ -36,6 +38,3 @@ s2p_adc_40: s2p_end: rts - - -#endif // ROM layout diff --git a/c64/kernal/screen/screen_get_cliped_pntr.s b/c64/kernal/screen/screen_get_cliped_pntr.s index 8db99846..761ffd92 100644 --- a/c64/kernal/screen/screen_get_cliped_pntr.s +++ b/c64/kernal/screen/screen_get_cliped_pntr.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Get PNTR value clipped to 0-39 range in .Y, sets flags to compare with 0, can trash .A @@ -15,6 +17,3 @@ screen_get_clipped_PNTR: !: cpy #$00 rts - - -#endif // ROM layout \ No newline at end of file diff --git a/c64/kernal/screen/screen_get_logical_line_end_ptr.s b/c64/kernal/screen/screen_get_logical_line_end_ptr.s index a0588006..e54bdd3d 100644 --- a/c64/kernal/screen/screen_get_logical_line_end_ptr.s +++ b/c64/kernal/screen/screen_get_logical_line_end_ptr.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE screen_get_logical_line_end_ptr: @@ -24,6 +26,3 @@ screen_get_logical_line_end_39: ldy #39 rts - - -#endif // ROM layout diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index 65bc33f2..92654151 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE screen_grow_logical_line_done_scroll: @@ -139,6 +141,3 @@ screen_grow_logical_line_copy_done: inx jsr screen_clear_line jmp screen_calculate_PNTR_LNMX - - -#endif // ROM layout diff --git a/c64/kernal/screen/screen_off.s b/c64/kernal/screen/screen_off.s index 572e3394..154ce86f 100644 --- a/c64/kernal/screen/screen_off.s +++ b/c64/kernal/screen/screen_off.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Helper routine to blank screen @@ -27,6 +29,3 @@ screen_off: #endif - - -#endif // ROM layout diff --git a/c64/kernal/screen/screen_on.s b/c64/kernal/screen/screen_on.s index 508355ce..24e70a1b 100644 --- a/c64/kernal/screen/screen_on.s +++ b/c64/kernal/screen/screen_on.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Helper routine to show screen @@ -17,6 +19,3 @@ screen_on: rts #endif - - -#endif // ROM layout diff --git a/c64/kernal/screen/screen_preserve_sal_eal.s b/c64/kernal/screen/screen_preserve_sal_eal.s index 25e37c94..e4f7f55f 100644 --- a/c64/kernal/screen/screen_preserve_sal_eal.s +++ b/c64/kernal/screen/screen_preserve_sal_eal.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE screen_preserve_sal_eal: @@ -30,6 +32,3 @@ screen_common_sal_eal: phy_trash_a phx_trash_a rts - - -#endif // ROM layout diff --git a/c64/kernal/screen/screen_restore_sal_eal.s b/c64/kernal/screen/screen_restore_sal_eal.s index ad46c66e..fd8648c5 100644 --- a/c64/kernal/screen/screen_restore_sal_eal.s +++ b/c64/kernal/screen/screen_restore_sal_eal.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE screen_restore_sal_eal: @@ -24,7 +26,4 @@ screen_restore_sal_eal: sta SAL+0 jmp screen_common_sal_eal - - - #endif // ROM layout \ No newline at end of file diff --git a/c64/kernal/tape/load_tape_normal.s b/c64/kernal/tape/load_tape_normal.s index 1d4f18b4..37b815a7 100644 --- a/c64/kernal/tape/load_tape_normal.s +++ b/c64/kernal/tape/load_tape_normal.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Tape (normal) part of the LOAD routine @@ -120,6 +122,3 @@ load_tape_normal_payload: #endif - - -#endif // ROM layout diff --git a/c64/kernal/tape/load_tape_turbo.s b/c64/kernal/tape/load_tape_turbo.s index 44af58c9..d5b43db1 100644 --- a/c64/kernal/tape/load_tape_turbo.s +++ b/c64/kernal/tape/load_tape_turbo.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Tape (turbo) part of the LOAD routine @@ -129,6 +131,3 @@ load_tape_turbo_loop: #endif // CONFIG_TAPE_TURBO - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_common.s b/c64/kernal/tape/tape_common.s index 4f99c6e8..e2461a05 100644 --- a/c64/kernal/tape/tape_common.s +++ b/c64/kernal/tape/tape_common.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Common routines for tape support @@ -305,6 +307,3 @@ tape_load_error: #endif - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_common_clean_sid.s b/c64/kernal/tape/tape_common_clean_sid.s index f054e91b..80b4bbee 100644 --- a/c64/kernal/tape/tape_common_clean_sid.s +++ b/c64/kernal/tape/tape_common_clean_sid.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Clear the SID settings - for sound effects during LOAD @@ -21,6 +23,3 @@ tape_clean_sid: #endif - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_common_ditch_verify.s b/c64/kernal/tape/tape_common_ditch_verify.s index 8fee8722..3fa1fcbb 100644 --- a/c64/kernal/tape/tape_common_ditch_verify.s +++ b/c64/kernal/tape/tape_common_ditch_verify.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Check if VERIFY asked - if yes, terminate loading @@ -20,6 +22,3 @@ tape_ditch_verify: #endif - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_common_motor.s b/c64/kernal/tape/tape_common_motor.s index 2526f062..f88934da 100644 --- a/c64/kernal/tape/tape_common_motor.s +++ b/c64/kernal/tape/tape_common_motor.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Handle tape deck motor @@ -24,6 +26,3 @@ tape_motor_on: #endif - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_common_prepare_cia.s b/c64/kernal/tape/tape_common_prepare_cia.s index d9f962f1..113dc339 100644 --- a/c64/kernal/tape/tape_common_prepare_cia.s +++ b/c64/kernal/tape/tape_common_prepare_cia.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE #if CONFIG_TAPE_NORMAL || CONFIG_TAPE_TURBO @@ -25,6 +27,3 @@ tape_common_prepare_cia: rts #endif - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_common_screen.s b/c64/kernal/tape/tape_common_screen.s index 61f25877..fe2742ac 100644 --- a/c64/kernal/tape/tape_common_screen.s +++ b/c64/kernal/tape/tape_common_screen.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Handle screen (visible/blanked) + tape deck motor (on/off), @@ -35,6 +37,3 @@ tape_screen_off_motor_on: jmp tape_motor_on #endif - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_normal_get_bit.s b/c64/kernal/tape/tape_normal_get_bit.s index fdd29b0e..a092daa1 100644 --- a/c64/kernal/tape/tape_normal_get_bit.s +++ b/c64/kernal/tape/tape_normal_get_bit.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Tape (normal) helper routine - bit reading @@ -56,6 +58,3 @@ tape_normal_get_bit_error: #endif // CONFIG_TAPE_NORMAL - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_normal_get_byte.s b/c64/kernal/tape/tape_normal_get_byte.s index 94634a65..98c98ee1 100644 --- a/c64/kernal/tape/tape_normal_get_byte.s +++ b/c64/kernal/tape/tape_normal_get_byte.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Tape (normal) helper routine - byte reading @@ -69,6 +71,3 @@ tape_normal_get_byte_error: #endif - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_normal_get_data.s b/c64/kernal/tape/tape_normal_get_data.s index 498113bf..d93c7de5 100644 --- a/c64/kernal/tape/tape_normal_get_data.s +++ b/c64/kernal/tape/tape_normal_get_data.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Tape (normal) helper routine - data block reading @@ -72,6 +74,3 @@ tape_normal_get_block_done: #endif - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_normal_get_marker.s b/c64/kernal/tape/tape_normal_get_marker.s index fbe40095..4106214c 100644 --- a/c64/kernal/tape/tape_normal_get_marker.s +++ b/c64/kernal/tape/tape_normal_get_marker.s @@ -1,5 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) - +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Tape (normal) helper routine - marker reading @@ -23,6 +24,3 @@ tape_normal_get_marker: #endif - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_normal_get_pulse.s b/c64/kernal/tape/tape_normal_get_pulse.s index 95d9e939..ac4a1f02 100644 --- a/c64/kernal/tape/tape_normal_get_pulse.s +++ b/c64/kernal/tape/tape_normal_get_pulse.s @@ -1,5 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) - +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Tape (normal) helper routine - pulse reading @@ -41,6 +42,3 @@ tape_normal_get_pulse: #endif - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_normal_pilot.s b/c64/kernal/tape/tape_normal_pilot.s index 28b461a6..d4664671 100644 --- a/c64/kernal/tape/tape_normal_pilot.s +++ b/c64/kernal/tape/tape_normal_pilot.s @@ -1,5 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) - +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Tape (turbo) helper routine - handling the pilot @@ -72,6 +73,3 @@ tape_normal_pilot_header: // require 128x $40 pulses #endif - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_normal_sync.s b/c64/kernal/tape/tape_normal_sync.s index b24a0b9a..95b46cb5 100644 --- a/c64/kernal/tape/tape_normal_sync.s +++ b/c64/kernal/tape/tape_normal_sync.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Tape (turbo) helper routine - synchronization handling @@ -36,6 +38,3 @@ tape_normal_sync_fail: #endif - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_turbo_bytestore.s b/c64/kernal/tape/tape_turbo_bytestore.s index 09f793b7..aa70358c 100644 --- a/c64/kernal/tape/tape_turbo_bytestore.s +++ b/c64/kernal/tape/tape_turbo_bytestore.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Tape (turbo) helper routine - storing byte uder I/O @@ -39,6 +41,3 @@ __tape_turbo_bytestore_source_end: #endif // CONFIG_TAPE_TURBO - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_turbo_get_bit.s b/c64/kernal/tape/tape_turbo_get_bit.s index ccd16571..baba4ffb 100644 --- a/c64/kernal/tape/tape_turbo_get_bit.s +++ b/c64/kernal/tape/tape_turbo_get_bit.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Tape (turbo) helper routine - bit reading @@ -54,6 +56,3 @@ tape_turbo_get_bit: #endif // CONFIG_TAPE_TURBO - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_turbo_get_byte.s b/c64/kernal/tape/tape_turbo_get_byte.s index 9c2c22a6..055bbf0e 100644 --- a/c64/kernal/tape/tape_turbo_get_byte.s +++ b/c64/kernal/tape/tape_turbo_get_byte.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Tape (turbo) helper routine - byte reading @@ -29,6 +31,3 @@ tape_turbo_get_byte: #endif // CONFIG_TAPE_TURBO - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_turbo_sync.s b/c64/kernal/tape/tape_turbo_sync.s index 2e2fc2ae..13832761 100644 --- a/c64/kernal/tape/tape_turbo_sync.s +++ b/c64/kernal/tape/tape_turbo_sync.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Tape (turbo) helper routine - synchronization handling @@ -113,6 +115,3 @@ tape_turbo_sync_payload: #endif // CONFIG_TAPE_TURBO - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_turbo_sync_first.s b/c64/kernal/tape/tape_turbo_sync_first.s index 2d7bc533..cbd63db4 100644 --- a/c64/kernal/tape/tape_turbo_sync_first.s +++ b/c64/kernal/tape/tape_turbo_sync_first.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Tape (turbo) helper routine - syynchronize to first byte with value $02 @@ -19,6 +21,3 @@ tape_turbo_sync_first: #endif - - -#endif // ROM layout diff --git a/c64/kernal/tape/tape_turbo_sync_measure.s b/c64/kernal/tape/tape_turbo_sync_measure.s index d68349db..6257ec6f 100644 --- a/c64/kernal/tape/tape_turbo_sync_measure.s +++ b/c64/kernal/tape/tape_turbo_sync_measure.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Tape (turbo) helper routine - measure bit length for calibration purposes @@ -41,6 +43,3 @@ tape_turbo_sync_measure_fail: #endif - - -#endif // ROM layout diff --git a/c64/kernal/time/rdtim.s b/c64/kernal/time/rdtim.s index 19916b2e..0271acb3 100644 --- a/c64/kernal/time/rdtim.s +++ b/c64/kernal/time/rdtim.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -25,6 +27,3 @@ RDTIM: // leaves IRQs enabled. cli rts - - -#endif // ROM layout diff --git a/c64/kernal/time/settim.s b/c64/kernal/time/settim.s index 2c919e01..7c07eb5c 100644 --- a/c64/kernal/time/settim.s +++ b/c64/kernal/time/settim.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -25,6 +27,3 @@ SETTIM: // leaves IRQs enabled. cli rts - - -#endif // ROM layout diff --git a/c64/kernal/time/udtim.s b/c64/kernal/time/udtim.s index 0374cfb6..9c75406f 100644 --- a/c64/kernal/time/udtim.s +++ b/c64/kernal/time/udtim.s @@ -1,4 +1,6 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -44,6 +46,3 @@ udtim_clock_rollover: sta TIME+2 sta TIME+1 beq udtim_time_done // done with clock - will always jump - - -#endif // ROM layout diff --git a/src/build_segment.cc b/src/build_segment.cc index 2c281c43..643da112 100644 --- a/src/build_segment.cc +++ b/src/build_segment.cc @@ -639,7 +639,8 @@ void SourceFile::preprocess() while (std::getline(stream, line)) { if (line.empty()) continue; - std::replace(std::begin(line), std::end(line), '\t', ' '); + std::replace(line.begin(), line.end(), '\t', ' '); + line.erase(std::remove(line.begin(), line.end(), '\r'), line.end()); if (!preprocessLine(line)) break; } } @@ -693,7 +694,7 @@ bool SourceFile::preprocessLine(const std::string &line) } else if (iter->compare("#TAKE") != 0) { - ERROR("syntax error, unsupported action in '#LAYOUT#'"); + ERROR(std::string("syntax error, unsupported action '") + token + "' in '#LAYOUT#'"); } // Tell the caller to finish processing the file From f922f90653f7faa5979d15f08ebc1dad41f46cb1 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 15 Jan 2020 20:56:32 +0100 Subject: [PATCH 70/77] some more turbo tape autocalibration fixes --- c64/kernal/tape/tape_turbo_sync.s | 84 +++++++++++++++++++++---------- 1 file changed, 58 insertions(+), 26 deletions(-) diff --git a/c64/kernal/tape/tape_turbo_sync.s b/c64/kernal/tape/tape_turbo_sync.s index 13832761..132f2e07 100644 --- a/c64/kernal/tape/tape_turbo_sync.s +++ b/c64/kernal/tape/tape_turbo_sync.s @@ -16,26 +16,12 @@ tape_turbo_sync_header: -#if CONFIG_TAPE_TURBO_AUTOCALIBRATE - - // Initial pulse threshold - lda #$BF // auto-calibration under VICE often returns this value - sta IRQTMP+0 - - // Zero temporary stack area - lda #$00 - ldy #$03 -!: - sta STACK, y - dey - bpl !- - -#endif // CONFIG_TAPE_TURBO_AUTOCALIBRATE +#if !CONFIG_TAPE_TURBO_AUTOCALIBRATE // Synchronize with start of sync sequence jsr tape_turbo_sync_first - // Perform synchronization + // Perform synchronization, double loop, total $C0 * $04 iterations ldx #$C0 !: phx_trash_a @@ -51,20 +37,57 @@ tape_turbo_sync_header: dex bne !-- - // FALLTROUGH +#else // CONFIG_TAPE_TURBO_AUTOCALIBRATE -#if CONFIG_TAPE_TURBO_AUTOCALIBRATE + // Initial pulse threshold + lda #$BF // auto-calibration under VICE often returns this value + sta IRQTMP+0 -tape_turbo_sync_calibrate: + // Zero temporary stack area + lda #$00 + ldy #$03 +!: + sta STACK, y + dey + bpl !- - ldy #$80 + // Synchronize with start of sync sequence + jsr tape_turbo_sync_first + + // Perform synchronization, get measurements from 128 bytes + ldx #$10 // FALLTROUGH -tape_turbo_sync_calibrate_loop: +tape_turbo_sync_outer_loop: + + // Set .Y (inner loop counter) to $28-$38, average $30; $10 * $30 equals $C0 * $04 + // We want a bit of irregularity with byte selection for calibration + txa + pha // store .X + clc + adc #$27 + tay + + // FALLTROUGH + +tape_turbo_sync_inner_loop: + + cpy #$09 + bcc !+ // if inner couter is 8 or lower, get this byte for measurement + + // Get byte without measurements + jsr tape_turbo_get_byte + cmp #$02 + bne tape_turbo_sync_header // branch if failure + beq tape_turbo_sync_header_next_iter // branch always + +!: + // Get byte and take measurements - // Skip 5 bits phy_trash_a + + // Skip 5 bits, they should be all 0 ldy #$04 !: jsr tape_turbo_get_bit @@ -72,13 +95,22 @@ tape_turbo_sync_calibrate_loop: dey bpl !- + // Get measurements from 3 bits jsr tape_turbo_sync_measure_0 jsr tape_turbo_sync_measure_1 jsr tape_turbo_sync_measure_0 ply_trash_a + + // FALLTROUGH + +tape_turbo_sync_header_next_iter: + dey - bne tape_turbo_sync_calibrate_loop + bne tape_turbo_sync_inner_loop + plx_trash_a + dex + bne tape_turbo_sync_outer_loop // Calculate new pulse threshold as arithmetic mean // We accumulated 256 zeros and 128 ones, so calculating average value is easy @@ -90,10 +122,10 @@ tape_turbo_sync_calibrate_loop: adc STACK+1 sta IRQTMP+0 - // FALLTROUGH - #endif // CONFIG_TAPE_TURBO_AUTOCALIBRATE + // FALLTROUGH + tape_turbo_sync_payload: jsr tape_turbo_sync_first @@ -111,7 +143,7 @@ tape_turbo_sync_payload: dex bne !- - rts + rts #endif // CONFIG_TAPE_TURBO From 815dbe5f35ed3bde2d6083b630ff30d5c8915cdf Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Thu, 16 Jan 2020 18:51:58 +0100 Subject: [PATCH 71/77] turbo tape now adjusts it's reading speed dynamically --- CONFIG.md | 6 -- STATUS.md | 2 +- c64/,,config_custom.s | 1 - c64/,,config_generic.s | 1 - c64/,,config_mega65.s | 1 - c64/,,config_testing.s | 1 - c64/,,config_ultimate64.s | 1 - c64/aliases/,aliases_ram_lowmem.s | 2 +- c64/kernal/tape/tape_common_prepare_cia.s | 31 ++++++++ c64/kernal/tape/tape_turbo_get_bit.s | 17 ++-- c64/kernal/tape/tape_turbo_get_byte.s | 29 ++++++- c64/kernal/tape/tape_turbo_sync.s | 96 ++--------------------- 12 files changed, 75 insertions(+), 113 deletions(-) diff --git a/CONFIG.md b/CONFIG.md index 800e646d..f5aa8e83 100644 --- a/CONFIG.md +++ b/CONFIG.md @@ -155,12 +155,6 @@ Adds a minimal turbo tape support - just LOAD command (device 7, like on _Action Needs about 650 bytes in KERNAL segment (if both normal and turbo are enabled, about 950 bytes are needed, as they share some code). If unsure - enable. -### `CONFIG_TAPE_TURBO_AUTOCALIBRATE` - -Extends the tape turbo load functionality by ability to adjust to tape speed differences. - -Needs about 100 bytes in KERNAL segment. If unsure - enable for Datasette or other tape recorder, disable for digital solutions like Tapuino. - ### `CONFIG_TAPE_NO_KEY_SENSE` Enable this option if you are using a tape interface adapter with some audio signal source connected. These adapters lack key sense functionality, so the computer is unable to tell whether Play got pressed or not - with this option ROM will assume Play got pressed after imppulses start arriving from the tape. diff --git a/STATUS.md b/STATUS.md index acbe51e6..80eed824 100644 --- a/STATUS.md +++ b/STATUS.md @@ -11,7 +11,7 @@ Here are the features of the Open ROMs not found in the original ROMs from the 8 * JiffyDOS and DolphinDOS protocols support * DOS wedge (direct mode only) - `@`, `@`, `@$`, `@$`, `@` -* turbo tape load support (as device 7, or using `←L`), quite sophisticated: up to 250 blocks (can store bytes under I/O), can use sync signal for autocalibration (less load errors than simple turbos) +* 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 * improved support for tape adapters (for using regular casette players and other audio devices instead of Datasette) * extended `LOAD` command diff --git a/c64/,,config_custom.s b/c64/,,config_custom.s index 40fa8d18..95bfda75 100644 --- a/c64/,,config_custom.s +++ b/c64/,,config_custom.s @@ -56,7 +56,6 @@ #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO -#define CONFIG_TAPE_TURBO_AUTOCALIBRATE // #define CONFIG_TAPE_NO_KEY_SENSE // #define CONFIG_TAPE_NO_MOTOR_CONTROL diff --git a/c64/,,config_generic.s b/c64/,,config_generic.s index e091a2af..4195ef46 100644 --- a/c64/,,config_generic.s +++ b/c64/,,config_generic.s @@ -50,7 +50,6 @@ #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO -#define CONFIG_TAPE_TURBO_AUTOCALIBRATE // #define CONFIG_TAPE_NO_KEY_SENSE // #define CONFIG_TAPE_NO_MOTOR_CONTROL diff --git a/c64/,,config_mega65.s b/c64/,,config_mega65.s index ea322e26..add9c08e 100644 --- a/c64/,,config_mega65.s +++ b/c64/,,config_mega65.s @@ -50,7 +50,6 @@ // #define CONFIG_TAPE_NORMAL // #define CONFIG_TAPE_TURBO -// #define CONFIG_TAPE_TURBO_AUTOCALIBRATE // #define CONFIG_TAPE_NO_KEY_SENSE // #define CONFIG_TAPE_NO_MOTOR_CONTROL diff --git a/c64/,,config_testing.s b/c64/,,config_testing.s index 59e2dbaa..0f7a164f 100644 --- a/c64/,,config_testing.s +++ b/c64/,,config_testing.s @@ -50,7 +50,6 @@ // #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO -// #define CONFIG_TAPE_TURBO_AUTOCALIBRATE // #define CONFIG_TAPE_NO_KEY_SENSE // #define CONFIG_TAPE_NO_MOTOR_CONTROL diff --git a/c64/,,config_ultimate64.s b/c64/,,config_ultimate64.s index 24045b8a..f2927c60 100644 --- a/c64/,,config_ultimate64.s +++ b/c64/,,config_ultimate64.s @@ -50,7 +50,6 @@ #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO -#define CONFIG_TAPE_TURBO_AUTOCALIBRATE // #define CONFIG_TAPE_NO_KEY_SENSE // #define CONFIG_TAPE_NO_MOTOR_CONTROL diff --git a/c64/aliases/,aliases_ram_lowmem.s b/c64/aliases/,aliases_ram_lowmem.s index 50f63017..4e6d2593 100644 --- a/c64/aliases/,aliases_ram_lowmem.s +++ b/c64/aliases/,aliases_ram_lowmem.s @@ -88,7 +88,7 @@ .label VERCKK = $93 // 0 = LOAD, 1 = VERIFY .label C3PO = $94 // flag - is BSOUR content valid .label BSOUR = $95 // serial bus buffered output byte - .label SYNO = $96 // -- NOT IMPLEMENTED -- + .label SYNO = $96 // temporary tape routines storage, [!] our usage differs .label XSAV = $97 // temporary register storage for ASCII/tape related routines [!] usage details might differ .label LDTND = $98 // number of entries in LAT / FAT / SAT tables .label DFLTN = $99 // default input device diff --git a/c64/kernal/tape/tape_common_prepare_cia.s b/c64/kernal/tape/tape_common_prepare_cia.s index 113dc339..8650e3e1 100644 --- a/c64/kernal/tape/tape_common_prepare_cia.s +++ b/c64/kernal/tape/tape_common_prepare_cia.s @@ -2,6 +2,37 @@ // #LAYOUT# * KERNAL_0 #TAKE // #LAYOUT# * * #IGNORE +// +// Prepare CIA timers for tape reading +// + +// +// Checked under VICE, PAL, average of 256 pulses: +// +// normal - short - timer goes down to $C9 +// normal - medium - timer goes down to $79 +// normal - long - timer goes down to $52 +// +// turbo - short - timer goes down to $B1 +// turbo - long - timer goes down to $CD +// +// +// Measurement subroutine: .A should contain timer value, $C000-$C002 zeroed +// +// clc +// adc $C001 +// sta $C001 +// bcc !+ +// inc $C000 +// !: +// inc $C002 +// beq !+ +// rts +// !: +// lda $C000 +// .break // .A contains our average +// rts +// #if CONFIG_TAPE_NORMAL || CONFIG_TAPE_TURBO diff --git a/c64/kernal/tape/tape_turbo_get_bit.s b/c64/kernal/tape/tape_turbo_get_bit.s index baba4ffb..e636772a 100644 --- a/c64/kernal/tape/tape_turbo_get_bit.s +++ b/c64/kernal/tape/tape_turbo_get_bit.s @@ -31,16 +31,13 @@ tape_turbo_get_bit: #endif - -#if CONFIG_TAPE_TURBO_AUTOCALIBRATE - tax - cmp IRQTMP+0 -#else - cmp #$BF // threshold calculated by autocalibration routines under VICE -#endif - + cmp SYNO // threshold bcs !+ + clc + ror + sta IRQTMP+0 // store half of the last measurement result for short pulse + lda #$01 sta SID_SIGVOL lda #$06 @@ -48,6 +45,10 @@ tape_turbo_get_bit: sec rts !: + clc + ror + sta IRQTMP+1 // store half of the last measurement result for long pulse + lda #$00 sta SID_SIGVOL sta VIC_EXTCOL diff --git a/c64/kernal/tape/tape_turbo_get_byte.s b/c64/kernal/tape/tape_turbo_get_byte.s index 055bbf0e..7dfe6d66 100644 --- a/c64/kernal/tape/tape_turbo_get_byte.s +++ b/c64/kernal/tape/tape_turbo_get_byte.s @@ -25,8 +25,35 @@ tape_turbo_get_byte: rol INBIT bcc !- // is the initial 1 shifted into carry already? plx_trash_a - lda INBIT + // Compensate for tape speed variations + + lda IRQTMP+0 // half of the last value for bit '0' + clc + adc IRQTMP+1 // half of the last value for bit '1' + + sec + sbc SYNO // now we have a diff between current threshold and calculated one + beq tape_turbo_get_byte_done // branch if threshold correction not needed + + bpl !+ + + lda SYNO + cmp #($BF - 10) + beq tape_turbo_get_byte_done // do not decrease threshold too far no matter what + + dec SYNO + bne tape_turbo_get_byte_done // branch always +!: + lda SYNO + cmp #($BF + 10) + beq tape_turbo_get_byte_done // do not increase threshold too far no matter what + + inc SYNO + +tape_turbo_get_byte_done: + + lda INBIT rts diff --git a/c64/kernal/tape/tape_turbo_sync.s b/c64/kernal/tape/tape_turbo_sync.s index 132f2e07..69367308 100644 --- a/c64/kernal/tape/tape_turbo_sync.s +++ b/c64/kernal/tape/tape_turbo_sync.s @@ -15,8 +15,9 @@ tape_turbo_sync_header: - -#if !CONFIG_TAPE_TURBO_AUTOCALIBRATE + // Initial pulse threshold + lda #$BF // measured 128 bits '0' and 128 bits '1' under VICE, calculated average + sta SYNO // Synchronize with start of sync sequence jsr tape_turbo_sync_first @@ -24,106 +25,19 @@ tape_turbo_sync_header: // Perform synchronization, double loop, total $C0 * $04 iterations ldx #$C0 !: - phx_trash_a ldy #$04 !: + stx XSAV jsr tape_turbo_get_byte cmp #$02 bne tape_turbo_sync_header // branch if failure dey bne !- - plx_trash_a + ldx XSAV dex bne !-- -#else // CONFIG_TAPE_TURBO_AUTOCALIBRATE - - // Initial pulse threshold - lda #$BF // auto-calibration under VICE often returns this value - sta IRQTMP+0 - - // Zero temporary stack area - lda #$00 - ldy #$03 -!: - sta STACK, y - dey - bpl !- - - // Synchronize with start of sync sequence - jsr tape_turbo_sync_first - - // Perform synchronization, get measurements from 128 bytes - ldx #$10 - - // FALLTROUGH - -tape_turbo_sync_outer_loop: - - // Set .Y (inner loop counter) to $28-$38, average $30; $10 * $30 equals $C0 * $04 - // We want a bit of irregularity with byte selection for calibration - txa - pha // store .X - clc - adc #$27 - tay - - // FALLTROUGH - -tape_turbo_sync_inner_loop: - - cpy #$09 - bcc !+ // if inner couter is 8 or lower, get this byte for measurement - - // Get byte without measurements - jsr tape_turbo_get_byte - cmp #$02 - bne tape_turbo_sync_header // branch if failure - beq tape_turbo_sync_header_next_iter // branch always - -!: - // Get byte and take measurements - - phy_trash_a - - // Skip 5 bits, they should be all 0 - ldy #$04 -!: - jsr tape_turbo_get_bit - bcs tape_turbo_sync_header - dey - bpl !- - - // Get measurements from 3 bits - jsr tape_turbo_sync_measure_0 - jsr tape_turbo_sync_measure_1 - jsr tape_turbo_sync_measure_0 - - ply_trash_a - - // FALLTROUGH - -tape_turbo_sync_header_next_iter: - - dey - bne tape_turbo_sync_inner_loop - plx_trash_a - dex - bne tape_turbo_sync_outer_loop - - // Calculate new pulse threshold as arithmetic mean - // We accumulated 256 zeros and 128 ones, so calculating average value is easy - - lda STACK+0 - clc - ror - clc - adc STACK+1 - sta IRQTMP+0 - -#endif // CONFIG_TAPE_TURBO_AUTOCALIBRATE - // FALLTROUGH tape_turbo_sync_payload: From f70f8a3deec91b1d6f773a659ea29de5810c9486 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Thu, 16 Jan 2020 19:30:12 +0100 Subject: [PATCH 72/77] initial version of development guide --- README.md | 5 +- doc/Development.md | 124 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 doc/Development.md diff --git a/README.md b/README.md index fd201623..9a966ccb 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,9 @@ 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 +* [implementation status](./STATUS.md) of various APIs and functionalities +* [configuration options](./CONFIG.md) for those willing to compile their own, customized ROM set +* [development guide](./doc/Development.md) for those interested in OpenROMs technical aspects # Problem Statement and Motivation diff --git a/doc/Development.md b/doc/Development.md new file mode 100644 index 00000000..8c63db10 --- /dev/null +++ b/doc/Development.md @@ -0,0 +1,124 @@ + +# OpenROMs development guide + +Note: preliminary version, incomplete! + +## Guidelines for software developers for OpenROMs compatibility + +Most important: always test your software on the original ROMs too. If your code works on the OpenROMs, but fails on the original firmware - than something is clearly wrong, and it might stop working once we make OpenROMs more compatible for one reason or another. + +### Unofficial ROM APIs + +Please, do not use any internal/unofficial OpenROMs API. They WILL change in an incompatible way, you may believe me. Using unofficial API of the original ROMs is OK if the routine is marked as supported in the [implementation status](../STATUS.md) document. + +### Compatibility with OpenROMs for Mega65 + +The Mega65 OpenROMs build aims to provide a C64-compatible memory map in range `$00000-$0FFFF`. For `$10000` and above, everything is still subject to change. + +Please note, that certain ROM routines are moved to additional Mega65 ROM area (2x8KB is not enough to implement full ROM functionality and additional features) - original locations contain just short compatibility code which remaps memory, calls the real routine, and restores default mapping (that means all blocks unmapped). This shouldn't be a problem for original C64 software, but can make a difference for Mega65-aware code; thus, please follow these simple rules: + +- do not call ROM routines with .B set to anything other than 0 (and .B set to 0x40 or above is a receipe for disaster!) +- be aware that ROM routines may restore the default memory mapping by means of MAP/EOM + +OpenROMs interrupt handlers do not touch the ROM mapping, range `0x4000-0xBFFF` can be freely mapped without disabling IRQ or NMI. The .Z register is mostly safe to use too - some routines might use it, but they will alwayys restore it's previous state. Please be aware, that for maximum compatibility our IRQ/NMI handlers DO NOT store/restore .Z register. + +### API extensions + +TODO - additional keys - bucky +TODO - additional keys - PETSCII + +## Tinkering with OpenROMs + +Make sure to read the main [README](../README.md) first - although any help with the project is always welcome, you need to be aware of the possible legal problems we want to avoid. + +### Code segments and ROM layouts + +Currently there are 2 ROM layouts defined: + +- `STD` - with 2 code segments: `BASIC` (`$A000-$E4D2`, where `$C000-$DFFF` is a skip-gap for RAM and I/O) and `KERNAL` (`$E4D2 - $FFFF`) +- `M65` - where `BASIC` becames `BASIC_0` and `KERNAL` becames `KERNAL_0`, additional segments might be added to the build system in the future; at the moment of writing this document additional 8KB of ROM is defined as `KERNAL_1` segment + +To check for current ROM layout or code segment use KickAssembler preprocessor defines, like `ROM_LAYOUT_STD`, `ROM_LAYOUT_M65`, `SEGMENT_BASIC`, `SEGMENT_KERNAL_1`. + +### Fixed location vs floating routines + +TODO - describe + +### Handling different ROM layouts + +For handling different ROM layouts, our build tool provides support for pragma-like comments, in the form: + +``` +// #LAYOUT# +``` + +where: + +- separators are mandatory - at least one space or tabulation has to be placed +- `` - currently `STD` or `M65`, asterisk symbol can be used to match any layout +- `` - `KERNAL`, `BASIC`, `KERNAL_0`, `KERNAL_1`, etc., asterisk symbol can be used to match any segment +- `` - what to do when layout and segment match: + +| action | meaning | +| :------------ | :-------------------------------------------- | +| `#IGNORE` | ignore the file completely | +| `#TAKE` | compile the file normally | +| `#TAKE-FLOAT` | compile the file, but force it to be floating | + +The first match counts, all the remaining ones are dropped. Examples: + +``` +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE +``` + +This is a very common one. For standard ROM layout just take the file. For non-standard ones take it only for compiling `KERNAL_0` segment, ignore it for anything other (like `KERNAL_1`). Another example: + +``` +// #LAYOUT# M65 KERNAL_0 #TAKE-FLOAT +// #LAYOUT# M65 KERNAL_1 #TAKE +// #LAYOUT# * * #IGNORE +``` + +This can be found in a private (internal) jumptable of `KERNAL_1` segmment of `M65` layout. For standard ROM part (`KERNAL_0` segment) take it as floating routine (for `KERNAL_0` segment the file provides only labels for the jumptable). For `KERNAL_1` segment of `M65` layout, take it as a fixed location-routine; in such case the file will provide a jumptable itself. For memory layout other than `M65`, just ignore the file. Yet another example: + +``` +// #LAYOUT# M65 KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE +``` + +This is used for memory mapping helper routines, which are only needed for Mega65 build. They will be placed in `KERNAL_0` segment in such case. And the last example: + +``` +// #LAYOUT# STD * #TAKE +// #LAYOUT# M65 KERNAL_0 #TAKE +// #LAYOUT# M65 KERNAL_1 #TAKE-FLOAT +// #LAYOUT# * * #IGNORE +``` + +This is for the routine, that on Mega65 goes to `KERNAL_1` segment, but can still be transparently called using fixed location in `KERNAL_0` segement. The code might, for example, look this way: + +``` +ROUTINE_NAME: + +#if (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + + jsr map_KERNAL_1 + jsr KERNAL_1__ROUTINE_NAME // execute routine from KERNAL_1 segment + jmp map_NORMAL + +#else + + // real routine, ended with RTS + +#endif +``` + +### CPU-specific optimizations + +TODO + +### Labels and VICE debugging + +TODO From 35d360c24b765143b1caceb576e698109dbb046c Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Thu, 16 Jan 2020 21:09:22 +0100 Subject: [PATCH 73/77] started work on tape format autodetection --- c64/,,config_custom.s | 1 + c64/kernal/tape/load_tape_normal.s | 27 ++++-- c64/kernal/tape/load_tape_turbo.s | 11 +++ c64/kernal/tape/tape_common_autodetect.s | 101 ++++++++++++++++++++++ c64/kernal/tape/tape_common_prepare_cia.s | 26 ++++-- c64/kernal/tape/tape_turbo_sync_measure.s | 45 ---------- 6 files changed, 156 insertions(+), 55 deletions(-) create mode 100644 c64/kernal/tape/tape_common_autodetect.s delete mode 100644 c64/kernal/tape/tape_turbo_sync_measure.s diff --git a/c64/,,config_custom.s b/c64/,,config_custom.s index 95bfda75..fe27fb2b 100644 --- a/c64/,,config_custom.s +++ b/c64/,,config_custom.s @@ -56,6 +56,7 @@ #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO +#define CONFIG_TAPE_AUTODETECT // not fully done yet! // #define CONFIG_TAPE_NO_KEY_SENSE // #define CONFIG_TAPE_NO_MOTOR_CONTROL diff --git a/c64/kernal/tape/load_tape_normal.s b/c64/kernal/tape/load_tape_normal.s index 37b815a7..2a24826c 100644 --- a/c64/kernal/tape/load_tape_normal.s +++ b/c64/kernal/tape/load_tape_normal.s @@ -44,6 +44,28 @@ load_tape_normal: jsr tape_ditch_verify // only LOAD is supported, no VERIFY +#if CONFIG_TAPE_TURBO && CONFIG_TAPE_AUTODETECT + + // Prepare for sound effects in case of turbo takeover + jsr tape_clean_sid + +#endif + + // Start playing + jsr tape_common_prepare_cia + jsr tape_ask_play + +#if CONFIG_TAPE_TURBO && CONFIG_TAPE_AUTODETECT + + // FALLTROUGH + +load_tape_normal_takeover: // entry point for turbo->normal takeover + + jsr tape_common_autodetect + bcs_16 load_tape_turbo_takeover + +#endif + // Temporarily store MEMUSS in EAL lda MEMUSS+1 @@ -51,11 +73,6 @@ load_tape_normal: lda MEMUSS+0 sta EAL+0 - // Start playing - - jsr tape_common_prepare_cia - jsr tape_ask_play - // FALLTROUGH load_tape_normal_header: diff --git a/c64/kernal/tape/load_tape_turbo.s b/c64/kernal/tape/load_tape_turbo.s index d5b43db1..c09d6bc9 100644 --- a/c64/kernal/tape/load_tape_turbo.s +++ b/c64/kernal/tape/load_tape_turbo.s @@ -27,6 +27,17 @@ load_tape_turbo: // FALLTROUGH +#if CONFIG_TAPE_NORMAL && CONFIG_TAPE_AUTODETECT + +load_tape_turbo_takeover: // entry point for turbo->normal takeover + + jsr tape_common_autodetect + bcc_16 load_tape_normal_takeover + +#endif + + // FALLTROUGH + load_tape_turbo_header: // Read file header; structure described here: diff --git a/c64/kernal/tape/tape_common_autodetect.s b/c64/kernal/tape/tape_common_autodetect.s new file mode 100644 index 00000000..85a08757 --- /dev/null +++ b/c64/kernal/tape/tape_common_autodetect.s @@ -0,0 +1,101 @@ +// #LAYOUT# STD * #TAKE +// #LAYOUT# * KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + +// +// Tries to detect +// +// Carry clear - NORMAL, Carry set - TURBO +// + +// XXX implement fallback to autodetection, correct screen color for NORMAL + + +#if CONFIG_TAPE_NORMAL && CONFIG_TAPE_TURBO && CONFIG_TAPE_AUTODETECT + + +tape_common_autodetect: + + // Set screen color to something neutral, silence the audio + + lda #$0C + sta VIC_EXTCOL + lda #$00 + sta SID_SIGVOL + + // FALLTROUGH + +tape_common_autodetect_retry: + + // It is not trivial to distinguish between NORMAL and TURBO, + // as short pulses of NORMAL (and sync uses only shorts) + // have similar lengths as long pulses of TURBO + + // Thus, the routine here reads certain amount of pulses + // looking for evidence for either NORMAL or TURBO system; + // in case of no evidence found, assume NORMAL + + lda #$00 // plus = probably NORMAL, minus = TURBO + sta XSAV + + ldy #$60 // $60 pulses cover 12 bytes of TURBO recording + jsr tape_normal_get_pulse // first pulse might be a garbage, ignore it + + // FALLTROUGH + +tape_common_autodetect_loop: + + jsr tape_normal_get_pulse // read pulse for detection attempt + + // If garbage found, retry detection + cmp #$28 + bcc tape_common_autodetect_retry // this is a VERY long pulse + cmp #$E8 + bcs tape_common_autodetect_retry // this is a VERY short pulse + + // First try to distinguish TURBO short signal (reference: $CD) + // from NORMAL signals (reference: $A5 or lower), these values + // give us threshold of ($CD + $A5) / 2 = $B9 + + cmp #$B9 + bcc !+ + dec XSAV // above $B9 (so signal is shorter), looks like TURBO +!: + // Now try to distinguish TURBO signals (reference: $B1 or higher) + // from NORMAL medium/long signals (reference: $7D or below), these values + // give us threshold of ($B1 + $7D) / 2 = $97 + + cmp #$97 + bcs !+ + inc XSAV +!: + // The sync for TURBO is not too long - if we have enough evidence, + // assume TURBO recording already + + lda XSAV + cmp #$FD + beq tape_common_autodetect_turbo + + // Next iteration + dey + bpl tape_common_autodetect_loop + + // Last chance for TURBO + + lda XSAV + bmi tape_common_autodetect_turbo + + // FALLTROUGH + +tape_common_autodetect_normal: + + clc + rts + +tape_common_autodetect_turbo: + + sec + rts + + +#endif diff --git a/c64/kernal/tape/tape_common_prepare_cia.s b/c64/kernal/tape/tape_common_prepare_cia.s index 8650e3e1..fefffbba 100644 --- a/c64/kernal/tape/tape_common_prepare_cia.s +++ b/c64/kernal/tape/tape_common_prepare_cia.s @@ -7,14 +7,14 @@ // // -// Checked under VICE, PAL, average of 256 pulses: +// Checked under VICE, PAL, average of 256 pulses: XXX retry measurements for NORMAL, something is probably wrong // -// normal - short - timer goes down to $C9 -// normal - medium - timer goes down to $79 +// normal - short - timer goes down to $A5 +// normal - medium - timer goes down to $7D // normal - long - timer goes down to $52 // -// turbo - short - timer goes down to $B1 -// turbo - long - timer goes down to $CD +// turbo - short - timer goes down to $CD +// turbo - long - timer goes down to $B1 // // // Measurement subroutine: .A should contain timer value, $C000-$C002 zeroed @@ -58,3 +58,19 @@ tape_common_prepare_cia: rts #endif + + +xxx_measure: + clc + adc $C001 + sta $C001 + bcc !+ + inc $C000 + !: + inc $C002 + beq !+ + rts + !: + lda $C000 + .break // .A contains our average + rts diff --git a/c64/kernal/tape/tape_turbo_sync_measure.s b/c64/kernal/tape/tape_turbo_sync_measure.s deleted file mode 100644 index 6257ec6f..00000000 --- a/c64/kernal/tape/tape_turbo_sync_measure.s +++ /dev/null @@ -1,45 +0,0 @@ -// #LAYOUT# STD * #TAKE -// #LAYOUT# * KERNAL_0 #TAKE -// #LAYOUT# * * #IGNORE - -// -// Tape (turbo) helper routine - measure bit length for calibration purposes -// - -#if CONFIG_TAPE_TURBO && CONFIG_TAPE_TURBO_AUTOCALIBRATE - - -tape_turbo_sync_measure_0: - - // Measure bit '0' - jsr tape_turbo_get_bit - bcs tape_turbo_sync_measure_fail - txa - adc STACK+2 - sta STACK+2 - bcc !+ - inc STACK+0 -!: - rts - -tape_turbo_sync_measure_1: - - // Measure bit '1' - jsr tape_turbo_get_bit - bcc tape_turbo_sync_measure_fail - txa - adc STACK+3 - sta STACK+3 - bcc !+ - inc STACK+1 -!: - rts - -tape_turbo_sync_measure_fail: - - pla - pla - jmp tape_turbo_sync_header - - -#endif From 854f03ef84bd98ae70da5aea8dd0bf874efc7bb2 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Thu, 16 Jan 2020 21:17:04 +0100 Subject: [PATCH 74/77] removed some debug code, left behind by mistake --- c64/kernal/tape/tape_common_autodetect.s | 3 +-- c64/kernal/tape/tape_common_prepare_cia.s | 16 --------------- c64/kernal/tape/tape_turbo_get_bit.s | 24 ----------------------- 3 files changed, 1 insertion(+), 42 deletions(-) diff --git a/c64/kernal/tape/tape_common_autodetect.s b/c64/kernal/tape/tape_common_autodetect.s index 85a08757..08bc5862 100644 --- a/c64/kernal/tape/tape_common_autodetect.s +++ b/c64/kernal/tape/tape_common_autodetect.s @@ -17,8 +17,7 @@ tape_common_autodetect: // Set screen color to something neutral, silence the audio - - lda #$0C + lda #$0B sta VIC_EXTCOL lda #$00 sta SID_SIGVOL diff --git a/c64/kernal/tape/tape_common_prepare_cia.s b/c64/kernal/tape/tape_common_prepare_cia.s index fefffbba..0fda0555 100644 --- a/c64/kernal/tape/tape_common_prepare_cia.s +++ b/c64/kernal/tape/tape_common_prepare_cia.s @@ -58,19 +58,3 @@ tape_common_prepare_cia: rts #endif - - -xxx_measure: - clc - adc $C001 - sta $C001 - bcc !+ - inc $C000 - !: - inc $C002 - beq !+ - rts - !: - lda $C000 - .break // .A contains our average - rts diff --git a/c64/kernal/tape/tape_turbo_get_bit.s b/c64/kernal/tape/tape_turbo_get_bit.s index e636772a..b3a2fb4c 100644 --- a/c64/kernal/tape/tape_turbo_get_bit.s +++ b/c64/kernal/tape/tape_turbo_get_bit.s @@ -31,29 +31,5 @@ tape_turbo_get_bit: #endif - cmp SYNO // threshold - bcs !+ - - clc - ror - sta IRQTMP+0 // store half of the last measurement result for short pulse - - lda #$01 - sta SID_SIGVOL - lda #$06 - sta VIC_EXTCOL - sec - rts -!: - clc - ror - sta IRQTMP+1 // store half of the last measurement result for long pulse - - lda #$00 - sta SID_SIGVOL - sta VIC_EXTCOL - clc - rts - #endif // CONFIG_TAPE_TURBO From 82347a8b1716fa8b2ff368352f47ee4e937e3c43 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 17 Jan 2020 17:38:37 +0100 Subject: [PATCH 75/77] improved tape system autodetection --- c64/,,config_custom.s | 2 +- c64/aliases/,aliases_config.s | 4 +-- c64/kernal/tape/load_tape_normal.s | 4 +-- c64/kernal/tape/load_tape_turbo.s | 10 +++++-- c64/kernal/tape/tape_common_autodetect.s | 36 ++++++++++++------------ c64/kernal/tape/tape_normal_get_data.s | 8 +++--- c64/kernal/tape/tape_normal_pilot.s | 3 ++ c64/kernal/tape/tape_normal_sync.s | 7 ++++- c64/kernal/tape/tape_turbo_get_bit.s | 24 ++++++++++++++++ c64/kernal/tape/tape_turbo_sync.s | 14 +++++++++ c64/kernal/tape/tape_turbo_sync_first.s | 30 ++++++++++++++++++++ 11 files changed, 112 insertions(+), 30 deletions(-) diff --git a/c64/,,config_custom.s b/c64/,,config_custom.s index fe27fb2b..60fa3d47 100644 --- a/c64/,,config_custom.s +++ b/c64/,,config_custom.s @@ -56,7 +56,7 @@ #define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO -#define CONFIG_TAPE_AUTODETECT // not fully done yet! +#define CONFIG_TAPE_AUTODETECT // mostly works, but not fullyy done yet! // #define CONFIG_TAPE_NO_KEY_SENSE // #define CONFIG_TAPE_NO_MOTOR_CONTROL diff --git a/c64/aliases/,aliases_config.s b/c64/aliases/,aliases_config.s index 953c5ee7..60bbddc6 100644 --- a/c64/aliases/,aliases_config.s +++ b/c64/aliases/,aliases_config.s @@ -168,8 +168,8 @@ // Check that tape configuration is correct { -#if !CONFIG_TAPE_TURBO && CONFIG_TAPE_TURBO_AUTOCALIBRATE - .error "CONFIG_TAPE_TURBO_AUTOCALIBRATE requires CONFIG_TAPE_TURBO*" +#if (!CONFIG_TAPE_NORMAL || !CONFIG_TAPE_TURBO) && CONFIG_TAPE_AUTODETECT + .error "CONFIG_TAPE_AUTODETECT requires both CONFIG_TAPE_NORMAL and CONFIG_TAPE_TURBO" #endif } diff --git a/c64/kernal/tape/load_tape_normal.s b/c64/kernal/tape/load_tape_normal.s index 2a24826c..f1ae13fa 100644 --- a/c64/kernal/tape/load_tape_normal.s +++ b/c64/kernal/tape/load_tape_normal.s @@ -44,7 +44,7 @@ load_tape_normal: jsr tape_ditch_verify // only LOAD is supported, no VERIFY -#if CONFIG_TAPE_TURBO && CONFIG_TAPE_AUTODETECT +#if CONFIG_TAPE_AUTODETECT // Prepare for sound effects in case of turbo takeover jsr tape_clean_sid @@ -55,7 +55,7 @@ load_tape_normal: jsr tape_common_prepare_cia jsr tape_ask_play -#if CONFIG_TAPE_TURBO && CONFIG_TAPE_AUTODETECT +#if CONFIG_TAPE_AUTODETECT // FALLTROUGH diff --git a/c64/kernal/tape/load_tape_turbo.s b/c64/kernal/tape/load_tape_turbo.s index c09d6bc9..fa470180 100644 --- a/c64/kernal/tape/load_tape_turbo.s +++ b/c64/kernal/tape/load_tape_turbo.s @@ -27,7 +27,7 @@ load_tape_turbo: // FALLTROUGH -#if CONFIG_TAPE_NORMAL && CONFIG_TAPE_AUTODETECT +#if CONFIG_TAPE_AUTODETECT load_tape_turbo_takeover: // entry point for turbo->normal takeover @@ -51,6 +51,9 @@ load_tape_turbo_header: // 16 bytes - filename, padded with 0x20 jsr tape_turbo_sync_header +#if CONFIG_TAPE_AUTODETECT + bcs_16 load_tape_normal_takeover // failure, probably not a turbo tape file +#endif ldy #$00 sta (TAPE1), y // store header type iny @@ -106,8 +109,11 @@ load_tape_turbo_payload: sta PRTY // Read file payload - +!: jsr tape_turbo_sync_payload +#if CONFIG_TAPE_AUTODETECT + bcs !- +#endif // FALLTROUGH diff --git a/c64/kernal/tape/tape_common_autodetect.s b/c64/kernal/tape/tape_common_autodetect.s index 08bc5862..86fefe92 100644 --- a/c64/kernal/tape/tape_common_autodetect.s +++ b/c64/kernal/tape/tape_common_autodetect.s @@ -5,13 +5,13 @@ // // Tries to detect // -// Carry clear - NORMAL, Carry set - TURBO +// Carry clear - normal, Carry set - turbo // -// XXX implement fallback to autodetection, correct screen color for NORMAL +// XXX implement fallback to autodetection in normal -#if CONFIG_TAPE_NORMAL && CONFIG_TAPE_TURBO && CONFIG_TAPE_AUTODETECT +#if CONFIG_TAPE_AUTODETECT tape_common_autodetect: @@ -26,18 +26,18 @@ tape_common_autodetect: tape_common_autodetect_retry: - // It is not trivial to distinguish between NORMAL and TURBO, - // as short pulses of NORMAL (and sync uses only shorts) - // have similar lengths as long pulses of TURBO + // It is not trivial to distinguish between normal and turbo, + // as short pulses of normal (and sync uses only shorts) + // have similar lengths as long pulses of turbo // Thus, the routine here reads certain amount of pulses - // looking for evidence for either NORMAL or TURBO system; - // in case of no evidence found, assume NORMAL + // looking for evidence for either normal or turbo system; + // in case of no evidence found, assume normal - lda #$00 // plus = probably NORMAL, minus = TURBO + lda #$00 // plus = probably normal, minus = turbo sta XSAV - ldy #$60 // $60 pulses cover 12 bytes of TURBO recording + ldy #$60 // $60 pulses cover 12 bytes of turbo recording jsr tape_normal_get_pulse // first pulse might be a garbage, ignore it // FALLTROUGH @@ -52,24 +52,24 @@ tape_common_autodetect_loop: cmp #$E8 bcs tape_common_autodetect_retry // this is a VERY short pulse - // First try to distinguish TURBO short signal (reference: $CD) - // from NORMAL signals (reference: $A5 or lower), these values + // First try to distinguish turbo short signal (reference: $CD) + // from normal signals (reference: $A5 or lower), these values // give us threshold of ($CD + $A5) / 2 = $B9 cmp #$B9 bcc !+ - dec XSAV // above $B9 (so signal is shorter), looks like TURBO + dec XSAV // above $B9 (so signal is shorter), looks like turbo !: - // Now try to distinguish TURBO signals (reference: $B1 or higher) - // from NORMAL medium/long signals (reference: $7D or below), these values + // Now try to distinguish turbo signals (reference: $B1 or higher) + // from normal medium/long signals (reference: $7D or below), these values // give us threshold of ($B1 + $7D) / 2 = $97 cmp #$97 bcs !+ inc XSAV !: - // The sync for TURBO is not too long - if we have enough evidence, - // assume TURBO recording already + // The sync for turbo is not too long - if we have enough evidence, + // assume turbo recording already lda XSAV cmp #$FD @@ -79,7 +79,7 @@ tape_common_autodetect_loop: dey bpl tape_common_autodetect_loop - // Last chance for TURBO + // Last chance for turbo lda XSAV bmi tape_common_autodetect_turbo diff --git a/c64/kernal/tape/tape_normal_get_data.s b/c64/kernal/tape/tape_normal_get_data.s index d93c7de5..780c85ac 100644 --- a/c64/kernal/tape/tape_normal_get_data.s +++ b/c64/kernal/tape/tape_normal_get_data.s @@ -24,10 +24,10 @@ tape_normal_get_data: lda #$00 sta RIPRTY - // Read the pilot and sync of the block + // Read sync of the block ldy #$89 jsr tape_normal_sync - bcs tape_normal_get_block_done // XXX make it more error resistant + bcs tape_normal_get_block_done jsr tape_normal_get_marker tape_normal_get_data_loop: @@ -39,7 +39,7 @@ tape_normal_get_data_loop: // Store byte, calculate checksum lda INBIT - ldy #$00 // XXX probably can be optimized out for 65C02 + ldy #$00 sta (MEMUSS), y eor RIPRTY sta RIPRTY @@ -60,7 +60,7 @@ tape_normal_get_data_loop: sec rts -tape_normal_get_checksum: // XXX handle second copy, with pilot starting from $09 +tape_normal_get_checksum: // XXX handle second copy, with pilot starting from $09 lda INBIT eor RIPRTY diff --git a/c64/kernal/tape/tape_normal_pilot.s b/c64/kernal/tape/tape_normal_pilot.s index d4664671..0ea7dff7 100644 --- a/c64/kernal/tape/tape_normal_pilot.s +++ b/c64/kernal/tape/tape_normal_pilot.s @@ -31,6 +31,9 @@ tape_normal_pilot_common: tape_normal_pilot_common_restart: + lda #$0B + sta VIC_EXTCOL + lda FSBLK sta ROPRTY diff --git a/c64/kernal/tape/tape_normal_sync.s b/c64/kernal/tape/tape_normal_sync.s index 95b46cb5..65310ab8 100644 --- a/c64/kernal/tape/tape_normal_sync.s +++ b/c64/kernal/tape/tape_normal_sync.s @@ -14,9 +14,14 @@ tape_normal_sync: + lda #$06 + sta VIC_EXTCOL + // Injest bytes of decreasing values - jsr tape_normal_get_marker // XXX handle result + jsr tape_normal_get_marker + bcs tape_normal_sync_fail // branch if end of data marker + jsr tape_normal_get_byte bcs tape_normal_sync_fail diff --git a/c64/kernal/tape/tape_turbo_get_bit.s b/c64/kernal/tape/tape_turbo_get_bit.s index b3a2fb4c..e636772a 100644 --- a/c64/kernal/tape/tape_turbo_get_bit.s +++ b/c64/kernal/tape/tape_turbo_get_bit.s @@ -31,5 +31,29 @@ tape_turbo_get_bit: #endif + cmp SYNO // threshold + bcs !+ + + clc + ror + sta IRQTMP+0 // store half of the last measurement result for short pulse + + lda #$01 + sta SID_SIGVOL + lda #$06 + sta VIC_EXTCOL + sec + rts +!: + clc + ror + sta IRQTMP+1 // store half of the last measurement result for long pulse + + lda #$00 + sta SID_SIGVOL + sta VIC_EXTCOL + clc + rts + #endif // CONFIG_TAPE_TURBO diff --git a/c64/kernal/tape/tape_turbo_sync.s b/c64/kernal/tape/tape_turbo_sync.s index 69367308..d283c733 100644 --- a/c64/kernal/tape/tape_turbo_sync.s +++ b/c64/kernal/tape/tape_turbo_sync.s @@ -21,6 +21,9 @@ tape_turbo_sync_header: // Synchronize with start of sync sequence jsr tape_turbo_sync_first +#if CONFIG_TAPE_AUTODETECT + bcs tape_turbo_sync_done +#endif // Perform synchronization, double loop, total $C0 * $04 iterations ldx #$C0 @@ -43,6 +46,9 @@ tape_turbo_sync_header: tape_turbo_sync_payload: jsr tape_turbo_sync_first +#if CONFIG_TAPE_AUTODETECT + bcs tape_turbo_sync_done // this shopuld not happen +#endif !: ldx #$09 // 9, 8, ... !: @@ -57,6 +63,14 @@ tape_turbo_sync_payload: dex bne !- +#if CONFIG_TAPE_AUTODETECT + clc +#endif + + // FALLTROUGH + +tape_turbo_sync_done: + rts diff --git a/c64/kernal/tape/tape_turbo_sync_first.s b/c64/kernal/tape/tape_turbo_sync_first.s index cbd63db4..caa4bff2 100644 --- a/c64/kernal/tape/tape_turbo_sync_first.s +++ b/c64/kernal/tape/tape_turbo_sync_first.s @@ -11,13 +11,43 @@ tape_turbo_sync_first: +#if CONFIG_TAPE_AUTODETECT + + ldy #$00 +!: jsr tape_turbo_get_bit rol INBIT lda INBIT + + cmp #$FF + bne !+ + iny + bpl !- + bmi tape_turbo_sync_first_fail // suspiciously many $FF bytes, probably not a turbo tape +!: + cmp #$02 + bne tape_turbo_sync_first + + clc + rts + +tape_turbo_sync_first_fail: + + sec + rts + +#else // no CONFIG_TAPE_AUTODETECT + + jsr tape_turbo_get_bit + rol INBIT + lda INBIT + cmp #$02 bne tape_turbo_sync_first rts +#endif + #endif From 13d8c63be4764c0ca6fe78339b11b118d4624d2d Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 17 Jan 2020 17:51:05 +0100 Subject: [PATCH 76/77] updated documentation and binaries --- CONFIG.md | 2 +- bin/basic_generic.rom | Bin 8192 -> 8192 bytes bin/basic_testing.rom | Bin 8192 -> 8192 bytes bin/basic_ultimate64.rom | Bin 8192 -> 8192 bytes bin/kernal_generic.rom | Bin 8192 -> 8192 bytes bin/kernal_testing.rom | Bin 8192 -> 8192 bytes bin/kernal_ultimate64.rom | Bin 8192 -> 8192 bytes bin/mega65.rom | Bin 131072 -> 131072 bytes c64/kernal/banking/4000.interop | 1 + doc/Development.md | 59 +++++++++++++++++++++++++++++--- 10 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 c64/kernal/banking/4000.interop diff --git a/CONFIG.md b/CONFIG.md index f5aa8e83..409511a4 100644 --- a/CONFIG.md +++ b/CONFIG.md @@ -153,7 +153,7 @@ Needs about 700 bytes in KERNAL segment (if both normal and turbo are enabled, a Adds a minimal turbo tape support - just LOAD command (device 7, like on _Action Replay_ and _Final_ cartridges), up to 250 blocks -Needs about 650 bytes in KERNAL segment (if both normal and turbo are enabled, about 950 bytes are needed, as they share some code). If unsure - enable. +Needs about 700 bytes in KERNAL segment (if both normal and turbo are enabled, about 950 bytes are needed, as they share some code). If unsure - enable. ### `CONFIG_TAPE_NO_KEY_SENSE` diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom index d974222787d9af42ba09512e7c0b1b6093bb35ab..e3d073acbe56d49a574c70cb50146e083db16466 100644 GIT binary patch delta 1841 zcmb7EZ){Ul6u*6K*N%?0L>Pmy?b40GfQ=2l{hBuzb2!Ns`B zjcP{E2^LR_;Rbr4pQ0K;HFgia=*>N27VVa*?Aem+@J49eC9&1AtnPnch~Q6o4g7!H z;3j3FWXb2QUJ{2b9`3jzKDKml3ng)@b@{3b{XsV)Xo>qq^4#)>w513mLzn{I-$CuXDcPof6}CkQr?zNjwq-yq#^pmFJr3@CSbMNlP)ndETHUKTb^VHz|GOADv(O z#fqFl?oq$Ua`yQR|0>n8=!n7&DJs#k)J7ettmoz4Dl=06SP4)Yz8lEffr#bFxUn!!OPGAufVIY9d^KL@H*^-U9cPW zz+QOc`M)*K4?%>O=WvTRttZ3+Td!XseT1VwW$3<;;*^}&MGDfba6*^SZN^0)wOmv! z#brTMtqQo*##l}gFLM=M-3s>J0R1FN;~ARB1kCJY)G&qJtPL2oSEcPY8nsH>#k!(& z$6a}zZe}HtJXf{5tT8iNCi#V7RA*xf4wYv{f=)U*V@@K84t*{i%4kmd?abDB!X?@L z0UmuIG)Q`?vg4S-t<0qM2;C?oJS_2;hY?pI6WbXiXe`!&@Yq)4(T*r7lQhJ2=iee6 zI&c{d90^O{=WB%1?&%h#MF=FUfjotvw;<{E1i9|!pod-!%K`l+=7=Te#l;s%u{H^< zAx%%tg*!uCES@3w;boh~)$=$8?1IAx@4)5WqP&`?QA2(jWt%UD?AM4X+j*XtChVv- zt%L_t(Mj2+nsiGFbyCR6(`fI}s=ZUukVAL=8^eBx8ir7R)P}5Hipmb%JYnZU_M{Ot zTID5j`$1ZBC30itYM z_AmzJWS$#17dPF&T5uY*pkC5!C?CN#6)SV++tV^?(6lUW%UwLLI&5_BlQ<%S_Ol04 zt|!7fyx38+$8j+#+f^6V2M+WrMZ3#S-_h<(CP#C$hhax5P4pL1@zZz8ow~zV)xR*E zKW|7UP!{Womu|1CY~NT}O$aSBX8O>~>?@ay;p|4$GD+?fuFGA*moqy~mEb@cRaoE1 z#1Q*<1S`9Hn6`yuxz8$494xMIvnk)QKz1bM;(|qZi`^9;Rnj#w-4Vjeo#EzhRBb!z delta 1954 zcmZuye{5679sl}Q?BFDJN@5I@`0@js0C7x;9YY;(lF_*2bphg)gsNb(hM7_oM4>C$ zG>2#|85&ExH>PY|v`3T|;$IXmO(R%SDug;eOWR&UgoK2&SS-MrX*@elSk}t7d&xHK zk3PM-``+E>`@QddzjvSOc62*Re(`YP;VXNZ8yXwhYFQ;OwYh`fSNYYGAVq&-=vcna z@+Kp8-ejncm|@iokmPE91(HW9f?GzBiFW1*tK=ktJV7vtAP_M9b-ua0of%dOn*Ud# zS{Tt1QTSXb$S6HSw-yvjKNzKt6`s zQ5@NUX2NK2j+(vdzUU-Ea5tL5-Vm8YYaS1kitXSW8l)MyUb_A&eN$d9J&~lBu2Y}af*Xw{xvfGjhlB+*mZaNq%5yGWDwGAo z^bd28C5ZhyXQagKOW~+Q%2CS_3Bv><8B(H~czEl`7HaAi+MnzfF$~1I?yKpymA1kY zNgT0Stnj~&o>2c>0(4aQ?%KgQRw>*WQAR<^Id~ZbGn|1mzZs$Jsyb<1m_Dnj@SRBR zakYN?`SaPsZ zp~8w>8CI;4VRatPR~BH6wh%vuS8I!Kv2G2{*WE%0a20I!;VoP7`f6;#HQ0=|;o28!@pg+9*Wp^*j-7bji&$aD<>tq&9WWl~9uGi$ z5j3H(JIs}ZBTd?S`Xc0dfb7+`VYb(mCXnVNbOh4pfO^`fgNA>ir2~t0H0JK>X!Ny% zXX_h~w*9#g?C3?fYJ{)<(C9lb54&I0-PnB)k`GUIz@00%j7-nzk|LDpf}dvknmVVz z!#*`K?|yF{*oF2sM`j-IA)T4^q)<)A7cl#?)2T)1>1=HVnv}7(xl^fK_YLikI`c1- z+P;y}e$v{saXT#NUYiHH3p`!(*p$uBczi7YF7Rbew!mq42Dg?uhP4@5^#tPY8+4`)#ui4>3zQ*pj`(y3h?!Nu*HyAn%hIT$> z1HZ%QIPLht&;kKR&&di{I0x^gAhk%u!0(BSI^4U-tzugX1$G6x_Hy%3)rT_zd$;ZSDc*a$hJx ze~WlW=<<>pA(t%jp&Ru?#X`LkjSo0u7Lm(F-6BGNynyIZN1`HWh^*{I z528aB<@nLd2NT*Q(jh-18v_0K(X$6HAAQoRU1YtThy7mG%S-icBt##1SdTVE{Ul6p z$T9BaOuUBG5Vy%BF{hzUT_dRPUn8`p5xI&B^GYHgLy_ci*WCX{Zs&E5^$2;Q8ZSe? zjS?MF)9Xq~*9uVrq)gX{ts&KAPeS{Z|CC#Fbu3U|*97`k`6xovu3<(Jt0#OmdzB5C zWz?}@^!G`WJ51f3WMr{=XK$=N$R{25 z7*@q;`(+e)0me%@s%#;C_DTHnJU%_5PLRy3PE6WDBw=c?CApPR&pu_kiA>iSjBT~1 zmzqqq0B93ST%1^;_x`Z>R+JIwr7+v&|2_Ky|0gRW;%UkuuLm`F>(K;t;TC#*`2Cw` y&&c%x6oFqY;ew7*`FIqXr)6XR3!X<^^Z;H1(rmN#7fLLz`p@fj#3l= diff --git a/bin/basic_testing.rom b/bin/basic_testing.rom index a941ab69ecdefd1515a0fe67acf2e0954f333bba..fb950a740dba8a8b03bc1652ea4fef6360eb93c3 100644 GIT binary patch delta 928 zcmZvbO=uHA6o7X(jhi-U6Rk?|rqQ5f!%~8?&3NCiWm!A~|Ty=7#_u(a`-c(t zqUj1v;R=In^&om`nO^j!qPxQhMVwJ2hylKFZnV8R&k5+Q_0{|VVKgo|1;#1M&Z}T$ zPsTZ*We34M8@87tC`@{5yM?AQ8Lr(tDe$_mQMwrdmbM=#5gqAiG`JLRvL%!fCe2lc z*6L|BNG;}x`$4S+lY7wh7hsB3?GkpU$djsLTmR?(KcC61&U-=!u)ES~)|q3g;>bqk zP{%hl3ya+lGcT$8LTXP)b#*U@4MWb5j-ID(`Gcg(edE^Y2jookFTwgmPSngg<7e{& zX|gC@iCT(PEOV^xS+-0qlP?u4^INwR3oZY%MzolYq>60qUqx*Q%8XRB=3+$BwN^Qx z&B~n>j6WA>@lp;rxd8ob3Z4(Vmp5ah9hu4U{OU(FO_ zpWc(syJ3pF1gya*BG>Qd_2y^PdHHP}mY<%S7 zjg`DCq6dcRqCObZw+Xb@AO+VtLC=sG*ZT81z+_Q&t1j7-a3{sjZq-dcnht!&$aDOM zEpz6=*W$Ft{GN1|AmjQ{e#;yb;27)A>-Pj$$5&sK#(^FOlWlvZh)>4&3J5kyGH_D?IWWj!`G$=$YYC-A??SIJ0%e zNvalWuTS#{|lGCha*YDyy(R{FgHYuIty@6 z*zbn&6R#17$UNr-^P27}r6sO}2&|Uq!SqD8UOIvJkZht>@vR}ao?DDDG5&BLbI;uQ z&bjCDoijUIcD5A1bne8tb*pb)xoYLD*XU3A%k`+=i~p*{H51|ndL|!EQZh=bCStR2 z<;_;!DUMZ5iiu_PU>`*oK^PnBJ=R^aPtkpz2KQ7$Z}u#@>Ob%Z)h9fwR@F|h$_s*M zVd~{E@A1w1H{^o9ql`a8iIIxqn;+S*fAjgS;4eJ9^=>W9!?wFZr8D^WCcY{7J*zhK zFQ(3`B=SRViyN+V$ablQCmphgQ<$}XWmg&c+JeeiyLc0C9IH$6rm+R+a;%z>QI+oE z=m>qAvksvj^EB)47d$idU12S7iY)5^ zYD;(5Mv_LJt{n~cg{^(ITN}yR8PS26%-Sbe%>+?*S8QFV-OKB@6YV~JZ__s}ywMkV zZTGez-Q}yEUNgbH&IbvvN!(V8t*~_iRuwM0hV+0U-w6Q;>&}nh*{m|zq^r3!s zp%>k36K<^?*O0bCuZ1P02)}Uxkf%=yzFb%u_K) zTu&?)hsa-;3w`>+;!5{VeL5@N7%@n?&7yW89TIGdklDAI9jsN8%DWpBwk<9Jbc;x> zk%H5LMoXq72d5=l2g{SKsHI}c{irt=^%OSOkcK*h1dq4b?(ue&x5)&w@%C?shIdFq z40WuRFVn8)%@J)m73X-UV8!I7L1?-+HTgJHvE74OD=>%chC3b7mSyoGgO0=>fCu3r zco-gmN8vGe92(&|cmmp>9d^LSur>Z9bim2}2<(KX;AwaUo&^mKCZ6V|Jh8nXCJzX_DGG`!B8ZWaw@db%G zoDHAmeXTep!tr`K}qS}dXA#4(a z556`PM`Lj17TQCPpp{f;v3Q{%p@bQ!Ix z2Kns!Q9GC^Nh#SLH8Ues&{MJfoSMzdu*U^aCkHoC@wKr$@SD}%dv5B5H(}I{hM;Z zi`xCFzJBJN{=+8sSwSQRz7USjyrXvSS$ph!cDUI7A>q%B66ea?;NG*f0mm;_>kka) z*VD#Ml=a4{d6CBYH8<8TCSd!SK>DZ(so6B&;yvPUH z5^T=Esng9R* delta 2031 zcmZuydr(x@8UOahE-tWZ1Vkh3;b9i!DPfnDfG$vFBR3`LHi8*-w~cm9GSxA*4Wwm} zxRE%quybRECUtsc_9FYhxFy8FhLA~Z%4MeQ4N_;Eai%a9YBQwX<)O97?CEzQndu+7 zbI7&+Kfdt*hNv&TB=b%@qWn&Zi#*CHV`-Mw8PmFLLtY zMUMG^3+P5bk!bieDCTs?x59-R&D=d+D<~xO1oBJ-0h!salgo0Oxqx0W{J#*>$jO>e z;4`hHVlp_kDJ4z$-T-?vg+$M$saT!5OnEBIR;f#O2P1ryK&7NU6OpI=+sJg7w9hlM zmtE%^I0^0`lhhN!P0~8wmo1O&^Z570-$foW6p;Jr0Q1re`=+LfJ)^G8e0`p2{gOBX zoFZByDqNg8S|fmzFfKl1PKVh>O=j9qz{Xe37KV7+Y!TY)%VB~M7yF8S7yAdz>&XK% zLXngx5NVkV&9M6taud#-U#kj+*ZA^Wi~-QeakQ7^Q2RqEAb%(?C&w zAu~Bf_RRFiJRC&ZZtE|zW2Q>uOEWZLwOHZXkKLf1Q=SR13SG{I_IX|_-RRd2f>N-H zDh8$n6Ar)WXRCD;-su3T3}01|^#NY{N1dc1zvP)OFQe7Apwjmmjy1mRvSS#9ozAB3 zKfSkhAM?FkKX~?;`i7Re=Nx&>`^}Aea`O+ABo`KMDLu5krWzDVs!~&xMs5jItI<(S zqKazPsHi@PCTmlu!MK(_M%NirX__~EJx$J_8)#bkM*8?BnwdpSgl6aD(&Rk4`3Y)< ze5zVc3t$T^ETWGW(-K-r%ji~G{$x3=uvlp&Ew^o}q8p#0nrfO`_Rppk81{Dz`=KTk z>dDXz?$Yw%dgHB(RN}lts*68`*)Hb-vNX&$xNL^6|5Uek5q3P6KC)v!%-lWR0yi#=nYqrBS*c{H4c=Pnu0Jvf zZvMWR``M2dfnRRkXJ1+bdLX@wcgIL+%jYortCO(@(0Qb(0a$E9KM_vEw%_)enjv=T zza&<%nK6FURKK|bmeZeK1hx&_ZHu%dp1kDtHUc3AcYgolv+BiGWahwEW!F}vf# zwGgwuJPC(xXQgIysoanY4}$JG@08|ZNBC)X8~DjWdD+YM=fT}+HLe^=KAn5Ivj!@_ z`{<_xZJk{nx!edbT2+T|I{9O0| z&d1{Ur4BjNotY3Xj2FkZ#7pCcPH|R0vHy7GZ+CMing5TbGJP(#z;nf(#9^lmfyN7UO;X!F0%)Xxo3uSn-*>wFu|5}ru zX#8avTfgi5e&>5fIGLpQl-c)mo33~2*#l$C6yl->$I#$+F7Wr4i zGcYcte@jSqAh38=sp1zNS14HRvjl@a>#7=4)KXv&0QE#ILR?f%jLS;LQR&Q_m061P zW*o8jEWGs?tVl$?7Q~v}LR@M7~IrH}5vam^Z_$R%6~Rl!yl2fc_~nWH|$K;!1{#{QL?+ zh(QJ{AuMWfew0LJR+eQwe-^5)3cOoNlEp+7`RyReV9##M%HALiA|q3B1$Fi5F1RO* zU-?eBWS@roDb)sl&l)d-nEnkOt1!vDzf8p(4UqX!k{Doaj&iDKjiW1C6Y|L5-#U*z zP06T@G0YM5{M6IbHx$Onctac|OPE=Y&@F2I zZC3lH#>LTKJBDjqR1Y)l^X#)(2lPoCuM>=j%vcD9vswylA#wKJ_-9GtLce|jQ?PDg z)E2_b=;aZUsA3*|%yrFV60n3Y7suwVF=xlf!N42W$v@+6O;#h}W!0N{UYiGOVX diff --git a/bin/kernal_generic.rom b/bin/kernal_generic.rom index bac972c36d1b7049a23a07bb8c28370c7ac00b81..90a888be89e665f69f51562da95bec5f40e56eb1 100644 GIT binary patch delta 5048 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 J@4f#K{|_OhlqdiI delta 4973 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 F`9C&4#<&0g delta 3600 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 diff --git a/bin/kernal_ultimate64.rom b/bin/kernal_ultimate64.rom index 88d88c6c4ca21221bee3f8528a3a019657f2e570..754f75c752d95d25efb9bcc2b24897692affc05d 100644 GIT binary patch delta 5260 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 ar^#CiiFT3@htOk1?AokR*Y`i}cKjcLyciJx delta 5078 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 diff --git a/bin/mega65.rom b/bin/mega65.rom index 7724db1c30d898d9e0c41b1185c5e67b4c405854..6f99bd91e3448d52240dd41c2d2753c9c1bd4157 100644 GIT binary patch delta 2617 zcmYLL4Nw&48Q$9i4*X+{D3?U*2mS;IDq1taG#OB1L*h5pb|#Z(GvlV(cy@3)aV80+ zCQxPZk_P6?M_ZuNc%HX}b&5G;5UC2@AK@twY8bGwV5WS)1;S~ao>(k)49cDYvTE%rt*`{YZ(hS`10kM;=s$g zFd*gQIiIx+$b~+gF7eek^2q(R#|v3u;Ie#P`T$+mFUx1JFUT+qFM85D>0>U0-uz1J zM5-!!klMBCvsKoNXIK7kSMZO8dzcJ4t*c0V`J zqti^3f}l&Ja^V8sVHz&XcA9U!r_eMzr}Ew!MR@2vs0dN-ua)+`3-l*-7o-IZAG6}c zD<85R8+mJNzGbC?onzkR;Ci(;2mC*vJrT5d6yd#v(9sa6Q1cJgHC zmDPcfEC-&g@)E+=b#y4?Fyp0K7M#BoAl86T$I7XVX0PTB}TY}VtyFBnC&I#wq3xMstIr(yNQf;&Hko!`tuCKm#hjX#R;>|H1?ghX0w&a)%z5E~Inz4n>Ga&9}0E9OM(TZ11 z078M5I9pSrr~VR&S`MY9nM@`&Efc}%p5?F;JwyIDv0~Xy3tD2h1Pt~c$z&Mpo?)s1B?6lh6{WENWa3bBc%m7=S08xPgG zn<;1aZeuT;md!Xv>tXPgh`YIG1_+4L#M3R?Sn*8DPFD1`>}4<4H3KHp^GOs``J$nX zs*brboVPaFF^>rpT7)L>;Hl9Li0_P}&xjORx5+;OM>k0(;h5-dm@C)2aq}n-q5zShQAY=HU<8eixd*+s7%tpnr4wKvZX9g$)Z{x)>`EB4SC*IsBK8XB#J;-o zPywX0ntVB#&jv=ih9+}NuT3w7$=6f(W&L^9!k|->n*EUoI;ge{esPO?46TV8-bt;a z`IAtG=r0Ww2>$PWknh_&BbN_H?48#xgT?y%@`KTvWK(p_4=$-tdH1Avk>2QdkM+%# z%g{azElPk##cP63ye{;ok}t^?eFmb>!(QxnZk5x(CnuvXtpO?qgqvWE|GEAy*aC#! zO3}6iTrpK(7L0Z0#W|(023`+@Q*uo2l4Z)~jA_EiyULc$&xAc@l%|TUMmvgPyg_lb z2DxoZOow2yN5o(-T^gsbo>fj(a0kHgU)fh487kF*9#BfHi7buVb>XdE?CH~`Kz{Qq!masQW!IQa!BctjoU09?F)8YP;lkMznpUVs0;VR#G}3^WJPrO zw#Z>9!6h7}A$Zhhiu_qM_9~ICrtkLd4t0H~;Gzk%E!dnzDq{;telVZdV?`uODmlgB^>DAUO%u{SMx5C9b zSu`tXtAL4a^O@vy*Lswvkh$>-P^}{a?WYEyV6f-1$QJP!HKWI3qWcxW?a2UEv1!UU z6odlLw9GfZr^pO*C$$a8ulz1Lh%IT`fo6#g^`rPcYt z1kI&E|8ck94yzaaAb#@d6ax2<_om)9ts|kSBGZ>7C-Hm^GEE?+96ty{L0MekjRq#b zlR&JPI1-z-W;SLIH_iz(W(QoBMtBXYG1uJ2Im52sG|nEz+Y%o$!xGbA8I;ner|=Wg z6L@B70`FPhju$8G+4EK4qj({XYod5~Dd#*$=CGM9LgD_9`uPI6I6 zp5iJ5!o<&wFQO9|F6WKtoDuzr^SesmM{L$1zU0a?m@U?=>r&Ikm^meyNaQqWkvt+T zEaj0kh`)(}LA-leA1`MZA2vrO(x>GN&dOHE`+9Eiz98Nm!poBQr6}Ha4}UL+?@(N< z;xt32_>h8?2%Z(jM=5Tnq(@(zmwT_Wz+72mt}Hg=oiW@!foBAr!!Cy3Q2saNo2hq# M@S%95lQZ%E1xOiDQvd(} delta 2595 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 diff --git a/c64/kernal/banking/4000.interop b/c64/kernal/banking/4000.interop new file mode 100644 index 00000000..7b399af5 --- /dev/null +++ b/c64/kernal/banking/4000.interop @@ -0,0 +1 @@ +This particular address is not for interoperability - we had to choose some fixed location foor the extended ROM jumptable, beginning of the mapped memory block is just sane. diff --git a/doc/Development.md b/doc/Development.md index 8c63db10..f36dd0bc 100644 --- a/doc/Development.md +++ b/doc/Development.md @@ -24,13 +24,58 @@ OpenROMs interrupt handlers do not touch the ROM mapping, range `0x4000-0xBFFF` ### API extensions -TODO - additional keys - bucky -TODO - additional keys - PETSCII +#### PETSCII + +OpenROMs provides support for several additional PETSCII codes (all compatible with C128 and/or C65): + +| PETSCII | description | +|:-------:|:---------------------------------------------------:| +| `$07` | bell (C128 and C65 compatible), not implemented yet | +| `$1B` | `ESC` key (C128 and C65 compatible) | +| `$84` | `HELP` key (C128 and C65 compatible) | +| `$10` | `F9` key (C65 compatible) | +| `$15` | `F10` key (C65 compatible) | +| `$16` | `F11` key (C65 compatible) | +| `$17` | `F12` key (C65 compatible) | +| `$19` | `F13` key (C65 compatible) | +| `$1A` | `F14` key (C65 compatible) | + +There is no official PETSCII code for `TAB` - we can't utilize the ones from C128 or C65 because it conflicts with some C64 codes. + +#### Bucky keys + +`SHFLAG` (`$028D`) variable is extended to support additional bucky keys on C128 and C65 keyboards: + +| bits 7-5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 | +|:--------:|:-----------:|:-----:|:-----: |:--------:|:-------:| +| reserved | `CAPS LOCK` | `ALT` | `CTRL` | `VENDOR` | `SHIFT` | + +Bits 3 and 4 are extension to the original variable, compatible with the C128 ROMs API. There is no official way to retrieve `NO_SCRL` status as of yet. The `40/80` key status cannot be retrieved in C64 mode at all (C128 hardware limitation). + ## Tinkering with OpenROMs Make sure to read the main [README](../README.md) first - although any help with the project is always welcome, you need to be aware of the possible legal problems we want to avoid. +### Make targets + +List of the most important make targets: + +| target | meaning | +|:-------------------:|:------------------------------------------------------------------------------:| +| `all` | builds all ROMs, places them in 'build' subdirectory | +| `clean` | removes all the compilation results and intermediate files | +| `updatebin` | upates ROMs in 'bin' subdirectory - with embedded version string, for release | +| `testsimilarity` | launches the similarity tool, see [README](../README.md) | +| `test` | builds the 'custom' configuration, launches it using VICE emulator | +| `test_generic` | builds the default ROMs, for generic C64/C128, launches using VICE | +| `test_generic_x128` | as above, but launches C128 emulator instead | +| `test_mega65` | builds the Mega65 ROM, launches it using XEMU emulator | +| `test_ultimate64` | builds the Ultimate 64 configuration, launches it using VICE emulator | +| `test_hybrid` | builds a hybrid ROM (OpenROMs Kernal + original BASIC), launches it using VICE | +| `test_testing` | builds a rather odd testing configuration, launches it using VICE emulator | + + ### Code segments and ROM layouts Currently there are 2 ROM layouts defined: @@ -42,7 +87,13 @@ To check for current ROM layout or code segment use KickAssembler preprocessor d ### Fixed location vs floating routines -TODO - describe +There are two types of routines (in this chapter routine = single source file): + +- fixed location - they are always placed in the location specified by developer; if it's not possible, an error is produced during the compilation +- floating - their location in the ROM segment is determined during the compilation by our build segment tool; from the developer point of view it is random + +File name of the fixed location routine adheres to the scheme: `addr.name.s`, where `addr` is a 4-digit hexadecimal number. They should be accompanied with `*.interop` file, describing why the location got fixed - see [README](../README.md) for more information. + ### Handling different ROM layouts @@ -121,4 +172,4 @@ TODO ### Labels and VICE debugging -TODO +Make targets which launch the VICE emulator pass al the label to the built-in monitor. Problem can arise if we have multiple labels pointing the same address - in such case VICE monitor displays a warning, and just one of the labels is being recognized. To avoid this problem please select a single main label for the given memory location, and make sure all the others contain `__` - such labels will be filtered out from the symbol file for VICE. From 585d37c899f14b7ca4524e0fc172314b81d7c635 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 17 Jan 2020 20:11:59 +0100 Subject: [PATCH 77/77] explained similarities >3, some documentation update --- doc/Development.md | 45 +++++++++++++++++++++++----------------- strings/0320EAE8 | 3 +++ strings/034C13 | 3 +++ strings/03A90085 | 3 +++ strings/1820FFE9 | 3 +++ strings/2902D007 | 3 +++ strings/48A5AD48A5 | 3 +++ strings/48A5AE48 | 3 +++ strings/48A5AE48A5 | 3 +++ strings/6885AD6885 | 3 +++ strings/6885AE6885 | 3 +++ strings/78A90085 | 3 +++ strings/84D34C | 3 +++ strings/86D6206CE5A4 | 3 +++ strings/880285AD | 3 +++ strings/8A48A901 | 3 +++ strings/98488A48 | 3 +++ strings/A00098912B | 3 +++ strings/A002A9008D | 3 +++ strings/A027B1AC91 | 3 +++ strings/A0E4201EAB | 3 +++ strings/A21820FFE9 | 3 +++ strings/A21820FFE9CA10FA | 3 +++ strings/A5AC48A5 | 3 +++ strings/A9012CA9 | 3 +++ strings/A9012CA900 | 3 +++ strings/A92091D18810 | 3 +++ strings/AA68A8 | 3 +++ strings/AA68A8A5 | 3 +++ strings/C385AEA5 | 3 +++ strings/C8B1D18891D1C8 | 3 +++ strings/C8B1F38891F3C8 | 3 +++ strings/D0F5A98085 | 3 +++ strings/E4201EAB | 3 +++ strings/EAA5012910 | 3 +++ strings/EC186020 | 3 +++ strings/FF2006 | 3 +++ 37 files changed, 134 insertions(+), 19 deletions(-) create mode 100644 strings/0320EAE8 create mode 100644 strings/034C13 create mode 100644 strings/03A90085 create mode 100644 strings/1820FFE9 create mode 100644 strings/2902D007 create mode 100644 strings/48A5AD48A5 create mode 100644 strings/48A5AE48 create mode 100644 strings/48A5AE48A5 create mode 100644 strings/6885AD6885 create mode 100644 strings/6885AE6885 create mode 100644 strings/78A90085 create mode 100644 strings/84D34C create mode 100644 strings/86D6206CE5A4 create mode 100644 strings/880285AD create mode 100644 strings/8A48A901 create mode 100644 strings/98488A48 create mode 100644 strings/A00098912B create mode 100644 strings/A002A9008D create mode 100644 strings/A027B1AC91 create mode 100644 strings/A0E4201EAB create mode 100644 strings/A21820FFE9 create mode 100644 strings/A21820FFE9CA10FA create mode 100644 strings/A5AC48A5 create mode 100644 strings/A9012CA9 create mode 100644 strings/A9012CA900 create mode 100644 strings/A92091D18810 create mode 100644 strings/AA68A8 create mode 100644 strings/AA68A8A5 create mode 100644 strings/C385AEA5 create mode 100644 strings/C8B1D18891D1C8 create mode 100644 strings/C8B1F38891F3C8 create mode 100644 strings/D0F5A98085 create mode 100644 strings/E4201EAB create mode 100644 strings/EAA5012910 create mode 100644 strings/EC186020 create mode 100644 strings/FF2006 diff --git a/doc/Development.md b/doc/Development.md index f36dd0bc..24760240 100644 --- a/doc/Development.md +++ b/doc/Development.md @@ -1,7 +1,14 @@ # OpenROMs development guide -Note: preliminary version, incomplete! +NOTE: this document is a preliminary version, definitely incomplete! + + +## In-depth protocol description + +- [JiffyDOS](./Protocol-JiffyDOS.md) +- [DolphinDOS](./Protocol-DolphinDOS.md) + ## Guidelines for software developers for OpenROMs compatibility @@ -28,17 +35,17 @@ OpenROMs interrupt handlers do not touch the ROM mapping, range `0x4000-0xBFFF` OpenROMs provides support for several additional PETSCII codes (all compatible with C128 and/or C65): -| PETSCII | description | -|:-------:|:---------------------------------------------------:| -| `$07` | bell (C128 and C65 compatible), not implemented yet | -| `$1B` | `ESC` key (C128 and C65 compatible) | -| `$84` | `HELP` key (C128 and C65 compatible) | -| `$10` | `F9` key (C65 compatible) | -| `$15` | `F10` key (C65 compatible) | -| `$16` | `F11` key (C65 compatible) | -| `$17` | `F12` key (C65 compatible) | -| `$19` | `F13` key (C65 compatible) | -| `$1A` | `F14` key (C65 compatible) | +| PETSCII code | description | +| :----------: | :-------------------------------------------------- | +| `$07` | bell (C128 and C65 compatible), not implemented yet | +| `$1B` | `ESC` key (C128 and C65 compatible) | +| `$84` | `HELP` key (C128 and C65 compatible) | +| `$10` | `F9` key (C65 compatible) | +| `$15` | `F10` key (C65 compatible) | +| `$16` | `F11` key (C65 compatible) | +| `$17` | `F12` key (C65 compatible) | +| `$19` | `F13` key (C65 compatible) | +| `$1A` | `F14` key (C65 compatible) | There is no official PETSCII code for `TAB` - we can't utilize the ones from C128 or C65 because it conflicts with some C64 codes. @@ -46,9 +53,9 @@ There is no official PETSCII code for `TAB` - we can't utilize the ones from C12 `SHFLAG` (`$028D`) variable is extended to support additional bucky keys on C128 and C65 keyboards: -| bits 7-5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 | -|:--------:|:-----------:|:-----:|:-----: |:--------:|:-------:| -| reserved | `CAPS LOCK` | `ALT` | `CTRL` | `VENDOR` | `SHIFT` | +| bits 7-5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 | +| :------: | :---------: | :------: | :------: | :------: | :------: | +| reserved | `CAPS LOCK` | `ALT` | `CTRL` | `VENDOR` | `SHIFT` | Bits 3 and 4 are extension to the original variable, compatible with the C128 ROMs API. There is no official way to retrieve `NO_SCRL` status as of yet. The `40/80` key status cannot be retrieved in C64 mode at all (C128 hardware limitation). @@ -61,8 +68,8 @@ Make sure to read the main [README](../README.md) first - although any help with List of the most important make targets: -| target | meaning | -|:-------------------:|:------------------------------------------------------------------------------:| +| target | description | +| :------------------ | :----------------------------------------------------------------------------- | | `all` | builds all ROMs, places them in 'build' subdirectory | | `clean` | removes all the compilation results and intermediate files | | `updatebin` | upates ROMs in 'bin' subdirectory - with embedded version string, for release | @@ -80,7 +87,7 @@ List of the most important make targets: Currently there are 2 ROM layouts defined: -- `STD` - with 2 code segments: `BASIC` (`$A000-$E4D2`, where `$C000-$DFFF` is a skip-gap for RAM and I/O) and `KERNAL` (`$E4D2 - $FFFF`) +- `STD` - with 2 code segments: `BASIC` (`$A000-$E4D2`, where `$C000-$DFFF` is a skip-gap for RAM and I/O area) and `KERNAL` (`$E4D3 - $FFFF`) - `M65` - where `BASIC` becames `BASIC_0` and `KERNAL` becames `KERNAL_0`, additional segments might be added to the build system in the future; at the moment of writing this document additional 8KB of ROM is defined as `KERNAL_1` segment To check for current ROM layout or code segment use KickAssembler preprocessor defines, like `ROM_LAYOUT_STD`, `ROM_LAYOUT_M65`, `SEGMENT_BASIC`, `SEGMENT_KERNAL_1`. @@ -110,7 +117,7 @@ where: - `` - `KERNAL`, `BASIC`, `KERNAL_0`, `KERNAL_1`, etc., asterisk symbol can be used to match any segment - `` - what to do when layout and segment match: -| action | meaning | +| action | description | | :------------ | :-------------------------------------------- | | `#IGNORE` | ignore the file completely | | `#TAKE` | compile the file normally | diff --git a/strings/0320EAE8 b/strings/0320EAE8 new file mode 100644 index 00000000..d1ad6f06 --- /dev/null +++ b/strings/0320EAE8 @@ -0,0 +1,3 @@ +$03 + JSR $E8EA + +Instruction (calling a well-known subroutine for screen line scrolling) + some part. Trivial, not copyrightable. diff --git a/strings/034C13 b/strings/034C13 new file mode 100644 index 00000000..f96f8a1d --- /dev/null +++ b/strings/034C13 @@ -0,0 +1,3 @@ +$03 + JMP$xx13 + +Not even a full instruction. Trivial - not coprightable. diff --git a/strings/03A90085 b/strings/03A90085 new file mode 100644 index 00000000..d5af9d35 --- /dev/null +++ b/strings/03A90085 @@ -0,0 +1,3 @@ +$03 + LDA #$00 + STA (zeropage address does not match) + +Instruction (loading 0 to accumulator) + some parts. Trivial - not copyrightable. diff --git a/strings/1820FFE9 b/strings/1820FFE9 new file mode 100644 index 00000000..75f7360d --- /dev/null +++ b/strings/1820FFE9 @@ -0,0 +1,3 @@ +$18 + JSR $E9FF + +Call to a well-known routine + some part. Trivial - not copyrightable. diff --git a/strings/2902D007 b/strings/2902D007 new file mode 100644 index 00000000..b0755a85 --- /dev/null +++ b/strings/2902D007 @@ -0,0 +1,3 @@ +AND #$02 + BNE (offset matches) + +Check for some bits in the accumulator. Trivial - not copyrightable. diff --git a/strings/48A5AD48A5 b/strings/48A5AD48A5 new file mode 100644 index 00000000..00ab3df4 --- /dev/null +++ b/strings/48A5AD48A5 @@ -0,0 +1,3 @@ +PHA + LDA $AD + PHA + LDA (zeropage address does not match) + +Part of the instruction sequence restoring a well-known 16-bit zeropage variable from a stack. Trivial - not copyrightable. diff --git a/strings/48A5AE48 b/strings/48A5AE48 new file mode 100644 index 00000000..6eba012c --- /dev/null +++ b/strings/48A5AE48 @@ -0,0 +1,3 @@ +PHA + LDA $AE + PHA + +Retrievin some data from the stack, among them matching zeropage variable. Trivial - not copyyrightable. diff --git a/strings/48A5AE48A5 b/strings/48A5AE48A5 new file mode 100644 index 00000000..67b669f3 --- /dev/null +++ b/strings/48A5AE48A5 @@ -0,0 +1,3 @@ +PHA + LDA $AE + PHA + LDA (zeropage address does not match) + +Part of the instruction sequence restoring a well-known 16-bit zeropage variable from a stack. Trivial - not copyrightable. diff --git a/strings/6885AD6885 b/strings/6885AD6885 new file mode 100644 index 00000000..5425bbeb --- /dev/null +++ b/strings/6885AD6885 @@ -0,0 +1,3 @@ +PHA + STA $AD + PHA + STA (zeropage address does not match) + +Part of the instruction sequence storing a well-known 16-bit zeropage variable on a stack. Trivial - not copyrightable. diff --git a/strings/6885AE6885 b/strings/6885AE6885 new file mode 100644 index 00000000..c42430a0 --- /dev/null +++ b/strings/6885AE6885 @@ -0,0 +1,3 @@ +PHA + STA $AE + PHA + STA (zeropage address does not match) + +Part of the instruction sequence storing a well-known 16-bit zeropage variable on a stack. Trivial - not copyrightable. diff --git a/strings/78A90085 b/strings/78A90085 new file mode 100644 index 00000000..2b7174c0 --- /dev/null +++ b/strings/78A90085 @@ -0,0 +1,3 @@ +SEI + LDA #$00 + STA (zeropage address does not match) + +Disable interrupts, store 0 in some memoryy location (address does not match). Trivial and not creative - not copyrightable. diff --git a/strings/84D34C b/strings/84D34C new file mode 100644 index 00000000..de73cd5c --- /dev/null +++ b/strings/84D34C @@ -0,0 +1,3 @@ +STY $D3 + JMP (address does not match) + +Instruction (storing data in a well-known memory location) + some part. Trivial - not copyrightable. diff --git a/strings/86D6206CE5A4 b/strings/86D6206CE5A4 new file mode 100644 index 00000000..08a745bd --- /dev/null +++ b/strings/86D6206CE5A4 @@ -0,0 +1,3 @@ +STX $D6 + JSR $E56C + LDY (zeropage address deos not match) + +Update one screen-related value with coontent of X register, call a well-known routine to adjust remaining ones - trivial, not copyrightable. diff --git a/strings/880285AD b/strings/880285AD new file mode 100644 index 00000000..b8940f30 --- /dev/null +++ b/strings/880285AD @@ -0,0 +1,3 @@ +$0288 + STA $AD + +Instruction + some part (address of a documented variable). Trivial - not copyrioghtable. diff --git a/strings/8A48A901 b/strings/8A48A901 new file mode 100644 index 00000000..efecae4e --- /dev/null +++ b/strings/8A48A901 @@ -0,0 +1,3 @@ +TXA + PHA + LDA #$01 + +Store .X register on the stack (would be a single instruction on 65C02) + loading accumulator with 1. Trivial and not creative - not copyrightable. diff --git a/strings/98488A48 b/strings/98488A48 new file mode 100644 index 00000000..9455ce34 --- /dev/null +++ b/strings/98488A48 @@ -0,0 +1,3 @@ +TYA + PHA + TXA + PHA + +Store Y and X CPU registers on a stack (would be only 2 instruction on 65C02 and above). Trivial - not copyrightable. diff --git a/strings/A00098912B b/strings/A00098912B new file mode 100644 index 00000000..f09592a6 --- /dev/null +++ b/strings/A00098912B @@ -0,0 +1,3 @@ +LDY #$00 + TYA + STA ($2B),Y + +6502 way to store 0 in a memory location pointed by a well-known pointer. Trivial - not copyrightable. diff --git a/strings/A002A9008D b/strings/A002A9008D new file mode 100644 index 00000000..bb7f0991 --- /dev/null +++ b/strings/A002A9008D @@ -0,0 +1,3 @@ +LDY #$02 + LDA #$00 + STA (address does not match) + +Put $02 to Y register, put 0 into accumulator and store it somewhere (address does not match) - trivial, not copyrightable. diff --git a/strings/A027B1AC91 b/strings/A027B1AC91 new file mode 100644 index 00000000..a92ffd34 --- /dev/null +++ b/strings/A027B1AC91 @@ -0,0 +1,3 @@ +LDY #$27 + LDA ($AC),Y + STA (zeroopage address deos not match),Y + +Get the last character from the screen line (using a documented vector) and store it somewhere (details differ here). Trivial - not copyrightable. diff --git a/strings/A0E4201EAB b/strings/A0E4201EAB new file mode 100644 index 00000000..0f2811e8 --- /dev/null +++ b/strings/A0E4201EAB @@ -0,0 +1,3 @@ +LDY #$E4 + JSR $AB1E + +Print a string by calling a well-known routine, only part of the string address matches. Trivial - not copyrightable. diff --git a/strings/A21820FFE9 b/strings/A21820FFE9 new file mode 100644 index 00000000..93505a11 --- /dev/null +++ b/strings/A21820FFE9 @@ -0,0 +1,3 @@ +LDX #$18 + JSR $E9FF + +Clear the last screen line by calling a well-known routine. Trivial - not copyrightable. diff --git a/strings/A21820FFE9CA10FA b/strings/A21820FFE9CA10FA new file mode 100644 index 00000000..a1806b8c --- /dev/null +++ b/strings/A21820FFE9CA10FA @@ -0,0 +1,3 @@ +LDX #$18 + JSR $E9FF + DEX + BPL (go back to JSR) + +Clear the whole screen by repeatedly calling a well-known routine to clear a single line. Not creative - not copyrightable. diff --git a/strings/A5AC48A5 b/strings/A5AC48A5 new file mode 100644 index 00000000..63d8d863 --- /dev/null +++ b/strings/A5AC48A5 @@ -0,0 +1,3 @@ +LDA $AC + PHA + LDA (zeropage address does not match) + +Storing some data on a stack, among them the same zeropage variable - trivial, not copyrightable. diff --git a/strings/A9012CA9 b/strings/A9012CA9 new file mode 100644 index 00000000..ad7929dc --- /dev/null +++ b/strings/A9012CA9 @@ -0,0 +1,3 @@ +LDA #$01 + BIT (to skip next instruction) + LDA # (value does not match) + +Setting accumulator to $01 or some other value (not included in similarity) depending on some condition (also not included in the similarity). Trivial - not copyrightable. diff --git a/strings/A9012CA900 b/strings/A9012CA900 new file mode 100644 index 00000000..38f139a6 --- /dev/null +++ b/strings/A9012CA900 @@ -0,0 +1,3 @@ +LDA #$01 + BIT (skip next instruction) + LDA #$00 + +Part of code setting accumulator to 0 or 1 depending on some condition (check not included in similarity). Trivial - not copyrightable. diff --git a/strings/A92091D18810 b/strings/A92091D18810 new file mode 100644 index 00000000..b3c3ff46 --- /dev/null +++ b/strings/A92091D18810 @@ -0,0 +1,3 @@ +LDA #$20 + STA ($D1),Y + DEY + BPL (offset does not match) + +Part of the loop filling area of the screen with spaces. Not creative - not coprightable. diff --git a/strings/AA68A8 b/strings/AA68A8 new file mode 100644 index 00000000..8e8695af --- /dev/null +++ b/strings/AA68A8 @@ -0,0 +1,3 @@ +TAX + PLA + TAY + +Simple register manipulation to retrieve .Y from the stack without losing .A. Trivial - not copyrightable. diff --git a/strings/AA68A8A5 b/strings/AA68A8A5 new file mode 100644 index 00000000..1d8d9bb0 --- /dev/null +++ b/strings/AA68A8A5 @@ -0,0 +1,3 @@ +TAX + PLA + TAY + LDA (zeropage address does not match) + +Some simple stack/register data transfer + loading accumulator from memory (address does not match) - trivial. Not copyrightable. diff --git a/strings/C385AEA5 b/strings/C385AEA5 new file mode 100644 index 00000000..a93143e2 --- /dev/null +++ b/strings/C385AEA5 @@ -0,0 +1,3 @@ +$C3 + STA $AE + LDA (zeropage adddress does not match) + +Instruction + some parts. Trivial - noot copyrightable. diff --git a/strings/C8B1D18891D1C8 b/strings/C8B1D18891D1C8 new file mode 100644 index 00000000..aa5caeac --- /dev/null +++ b/strings/C8B1D18891D1C8 @@ -0,0 +1,3 @@ +INY + LDA ($D1),Y + DEY + STA ($D1),Y + INY + +Part of the loop moving some memory content (pointed by a zeropage variable) by 1 byte. Not creative - not copyrightable. diff --git a/strings/C8B1F38891F3C8 b/strings/C8B1F38891F3C8 new file mode 100644 index 00000000..6f3b39af --- /dev/null +++ b/strings/C8B1F38891F3C8 @@ -0,0 +1,3 @@ +INY + LDA ($F3),Y + DEY + STA ($F3),Y + INY + +Part of the loop moving some memory content (pointed by a zeropage variable) by 1 byte. Not creative - not copyrightable. diff --git a/strings/D0F5A98085 b/strings/D0F5A98085 new file mode 100644 index 00000000..d5a1416c --- /dev/null +++ b/strings/D0F5A98085 @@ -0,0 +1,3 @@ +BNE (offset matches) + LDA #$80 + STA (zeropage address does not match) + +Depending on some condition (check does not fully match) store $80 in some memoryy location (address does not match). Trivial - not copyrightable. diff --git a/strings/E4201EAB b/strings/E4201EAB new file mode 100644 index 00000000..e420158b --- /dev/null +++ b/strings/E4201EAB @@ -0,0 +1,3 @@ +$E4 + JSR $AB1E + +Call to a well-known routine + some part. Trivial - not copyrightable. diff --git a/strings/EAA5012910 b/strings/EAA5012910 new file mode 100644 index 00000000..00f8009c --- /dev/null +++ b/strings/EAA5012910 @@ -0,0 +1,3 @@ +$EA + LDA $01 + AND #$10 + +Clearing bit on bte fetched from a documented hardware port + some part of other instruction. Trivial - not copyyrightable. diff --git a/strings/EC186020 b/strings/EC186020 new file mode 100644 index 00000000..5bb258f9 --- /dev/null +++ b/strings/EC186020 @@ -0,0 +1,3 @@ +$EC + CLC + RTS (end of routine) + JSR (address does not match) + +Routine ending with enabling interrupts + beginning of another one (just instruction opcode matches, not the argument). Trivial - not copyrightable. diff --git a/strings/FF2006 b/strings/FF2006 new file mode 100644 index 00000000..fd18433d --- /dev/null +++ b/strings/FF2006 @@ -0,0 +1,3 @@ +$FF + JSR$xx06 + +Not even a full instruction. Trivial - not copyrightable.