From 59af3b7e5771a5f9934d2eebd40439446c9b3c02 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sat, 18 Jul 2020 20:04:36 +0200 Subject: [PATCH] more work towards string concatenation, updated binaries and documentation --- README.md | 4 +- STATUS.md | 14 +++--- bin/basic_generic.rom | Bin 8192 -> 8192 bytes bin/basic_ultimate64.rom | Bin 8192 -> 8192 bytes bin/kernal_generic.rom | Bin 8192 -> 8192 bytes bin/kernal_ultimate64.rom | Bin 8192 -> 8192 bytes bin/mega65.rom | Bin 131072 -> 131072 bytes bin/mega65_pxlfont.rom | Bin 131072 -> 131072 bytes src/,,config_custom.s | 4 +- src/basic/basic_operators/oper_add.s | 68 +++++++++++++++++++++++++-- src/basic/engine/tmpstr_alloc.s | 30 ++++++++++-- src/basic/engine/varstr_alloc.s | 1 - 12 files changed, 103 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index ed96c5b8..2472cd42 100644 --- a/README.md +++ b/README.md @@ -6,11 +6,13 @@ A project to create unencumbered open-source ROMs for use on selected retro comp * [implementation status](./STATUS.md) of various APIs and functionalities * [configuration options](./CONFIG.md) for those willing to compile their own, customized ROM set -* [BASIC extensions](doc/Extended-BASIC.md) +* [BASIC extensions](./doc/Extended-BASIC.md) * [development guide](./doc/Development.md) for those interested in technical aspects * [license](./LICENSE) information and list of major contributors * [credits](./CREDITS.md) to people whose work was of great help to us +To download pre-built ROM images, go [here](./bin). + # Problem Statement and Motivation The copyrights of various old computer system ROMs are still alive, and together with trademarks, can present significant diff --git a/STATUS.md b/STATUS.md index 276414db..66547f2a 100644 --- a/STATUS.md +++ b/STATUS.md @@ -11,6 +11,12 @@ 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) - `@`, `@`, `@$`, `@$`, `@` * BASIC extensions, see the [documentation](doc/Extended-BASIC.md) +* extended / tweaked `LOAD` / `VERIFY` commands + * start/end addresses are displayed, in the Final cartridge style + * command with just the file name tries to use the last device if it's number seems sane; otherwise uses 8 + * command without parameters tries to load first file from drive chosen as above +* `LIST` command should never damage the screen if trying to list memory content which is not a BASIC program +* high performance garbage collector * turbo tape load support (as device 7, or using `←L` / `←M`, optionally with a file name), quite sophisticated: up to 250 blocks (can store bytes under I/O), automatically adjusts for tape speed differences * normal tape load error log is limited by free stack space only (no artificial limitation like in original ROMs) @@ -18,12 +24,6 @@ Here are the features of the Open ROMs not found in the original ROMs from the 8 * improved support for tape adapters (for using regular casette players and other audio devices instead of Datasette) and emulators * built-in tape head align tool (only feasible to use on machines with extended memory, like Mega65) -* extended / tweaked `LOAD` / `VERIFY` commands - * start/end addresses are displayed, in the Final cartridge style - * command with just the file name tries to use the last device if it's number seems sane; otherwise uses 8 - * command without parameters tries to load first file from drive chosen as above -* `LIST` command should never damage the screen if trying to list memory content which is not a BASIC program - * uses RAM under ROM and I/O: 51199 bytes free (up to `$CFFF`) by default, but 61438 is also possible * cold/warm start silences multiple SID chips * warm start due to BRK prints out the instruction address @@ -42,7 +42,7 @@ The following ROM features are currently missing and are not planned due to spac The following ROM features are currently missing: * most BASIC commands -* BASIC variables +* BASIC variables (work in progress, strings partially work now) * BASIC expression handling * most floating point routines * RS-232 support diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom index 8e9caf1c002eca45c671f4250b3621c8ff6c618b..62954140c1caa0b0ab1282840747865c29cb6041 100644 GIT binary patch delta 4964 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 diff --git a/bin/kernal_generic.rom b/bin/kernal_generic.rom index 57116e02d872973f9151e1cbd0091ae1bd0b48f7..90ede62cf09df395d9037ef1e65cf57906325ee0 100644 GIT binary patch delta 3964 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 delta 4027 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 diff --git a/bin/kernal_ultimate64.rom b/bin/kernal_ultimate64.rom index 80a270c84a6425b2bfa12308d6a876d26acaa09a..74418042803fa147ddc8095d023269e1a40a99e4 100644 GIT binary patch delta 3836 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 delta 3889 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 Sz~1X%g!ks>`)=G%QT`1z$t@HB diff --git a/bin/mega65.rom b/bin/mega65.rom index 563284aa00fde16aadc8f3ae976b1336fdb7083f..aa8a0643cf4e4250647fcdbd33f852d2432dc46c 100644 GIT binary patch delta 7630 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 T#-1vfYk8GY{Lg=ha>4%ttwJfG diff --git a/bin/mega65_pxlfont.rom b/bin/mega65_pxlfont.rom index 896f68ff2ce37989bbc64da64944d15a2685174a..cabc4485c688d7a73fad4ac75151e5a9b04fe26e 100644 GIT binary patch delta 7630 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 T#-1vfYk8GY{Lg=ha>4%ttwJfG diff --git a/src/,,config_custom.s b/src/,,config_custom.s index ad83a50a..da689381 100644 --- a/src/,,config_custom.s +++ b/src/,,config_custom.s @@ -39,9 +39,9 @@ // Memory model -// #define CONFIG_MEMORY_MODEL_38K +#define CONFIG_MEMORY_MODEL_38K // #define CONFIG_MEMORY_MODEL_46K -#define CONFIG_MEMORY_MODEL_50K +// #define CONFIG_MEMORY_MODEL_50K // #define CONFIG_MEMORY_MODEL_60K diff --git a/src/basic/basic_operators/oper_add.s b/src/basic/basic_operators/oper_add.s index d1f6401b..46d124c7 100644 --- a/src/basic/basic_operators/oper_add.s +++ b/src/basic/basic_operators/oper_add.s @@ -52,21 +52,81 @@ oper_add_strings: jmp FRMEVL_continue !: - // Allocate memory for concatenated string + // Allocate memory for the concatenated string clc adc __FAC2+0 bcs_16 do_STRING_TOO_LONG_error -.break - jsr tmpstr_alloc + // Copy the temporary string pointer to INDEX + ldy #$01 + lda (VARPNT), y + sta INDEX+0 + iny + lda (VARPNT), y + sta INDEX+1 + // Perform the concatenation - // XXX finish the implementation +#if CONFIG_MEMORY_MODEL_60K + + // XXX + // XXX + // XXX +#elif CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K + // XXX consider optimized version without multiple JSRs + + // XXX + // XXX + // XXX + +#else // CONFIG_MEMORY_MODEL_38K + + // Copy data from the first string + + ldy #$00 +!: + lda (__FAC2+1),y + sta (INDEX),y + iny + cpy __FAC2+0 + bne !- + + // Increase INDEX pointer by the size of the 1st string + + tya + jsr varstr_INDEX_up_A + + // Copy data from the second string + + ldy #$00 +!: + lda (__FAC1+1),y + sta (INDEX),y + iny + cpy __FAC1+0 + bne !- + +#endif + + // Free old strings - if they are temporary + + // XXX + // XXX + // XXX + + // Copy the descriptor to __FAC1 + + ldy #$02 +!: + lda (VARPNT), y + sta __FAC1, y + dey + bpl !- oper_add_strings_end: diff --git a/src/basic/engine/tmpstr_alloc.s b/src/basic/engine/tmpstr_alloc.s index b5b3698e..8d94899f 100644 --- a/src/basic/engine/tmpstr_alloc.s +++ b/src/basic/engine/tmpstr_alloc.s @@ -8,14 +8,38 @@ // Input: // -.A desired string length, has to be > 0 // +// Output: +// - VARPNT points to the newly alocated descriptor // tmpstr_alloc: + tax + // First we need to find a free temporary string descriptor - // XXX TEMPPT-> LASTPT + lda TEMPPT + cmp #$22 + bcs_16 do_FORMULA_TOO_COMPLEX_error - // XXX implement this + tay + sta LASTPT + clc + adc #$03 + sta TEMPPT - rts + // Store desired string length + + stx $00, y + + // Store descriptor address + + lda LASTPT + sta VARPNT+0 + lda #$00 + sta VARPNT+1 + + // Jump to alocation routine + // XXX consider falltrough + + jmp varstr_alloc diff --git a/src/basic/engine/varstr_alloc.s b/src/basic/engine/varstr_alloc.s index d5bc5e04..ee06e329 100644 --- a/src/basic/engine/varstr_alloc.s +++ b/src/basic/engine/varstr_alloc.s @@ -20,7 +20,6 @@ // - fills-in pointer in the string descriptor // -// XXX test this routine varstr_alloc: