more work towards string concatenation, updated binaries and documentation

This commit is contained in:
FeralChild64 committed 2020-07-18 20:04:36 +02:00
1 parent 778057e9f2
commit 59af3b7e57
12 files changed
+103 -18

No files matched your search

+3 -1
View File
@@ -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
+7 -7
View File
@@ -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) - `@<drive_number>`, `@<command>`, `@$`, `@$<params>`, `@`
* 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
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
+2 -2
View File
@@ -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
+64 -4
View File
@@ -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:
+27 -3
View File
@@ -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
-1
View File
@@ -20,7 +20,6 @@
// - fills-in pointer in the string descriptor
//
// XXX test this routine
varstr_alloc: