small code reorganization for arrays support
This commit is contained in:
1 parent
7eada6daa7
commit
07bbc21e50
6 files changed
+101
-19
No files matched your search
@@ -0,0 +1,12 @@
|
|||||||
|
// #LAYOUT# STD * #TAKE
|
||||||
|
// #LAYOUT# * BASIC_0 #TAKE
|
||||||
|
// #LAYOUT# * * #IGNORE
|
||||||
|
|
||||||
|
|
||||||
|
check_stack_space:
|
||||||
|
|
||||||
|
tsx
|
||||||
|
cpx #$60 // XXX is this a safe threshold?
|
||||||
|
bcc_16 do_FORMULA_TOO_COMPLEX_error
|
||||||
|
|
||||||
|
rts
|
||||||
@@ -323,9 +323,7 @@ FRMEVL_push_operator_address:
|
|||||||
// Check if there is enough stack space; this could not have been done earlier,
|
// Check if there is enough stack space; this could not have been done earlier,
|
||||||
// as this is the place where unary operator support calls
|
// as this is the place where unary operator support calls
|
||||||
|
|
||||||
tsx
|
jsr check_stack_space
|
||||||
cpx #$60 // XXX is this a safe threshold?
|
|
||||||
bcc_16 do_FORMULA_TOO_COMPLEX_error
|
|
||||||
|
|
||||||
// Push the operator address to stack, in a form
|
// Push the operator address to stack, in a form
|
||||||
// suitable for RTS
|
// suitable for RTS
|
||||||
|
|||||||
@@ -44,15 +44,26 @@ array_create_fetch_dims_loop:
|
|||||||
|
|
||||||
inx
|
inx
|
||||||
|
|
||||||
// XXX check if stack has reasonable space free
|
// Check if the stack has reasonable space free
|
||||||
|
|
||||||
// Fetch the dimension, put it on the stack - confirmed with orioginal ROM,
|
jsr check_stack_space
|
||||||
// that it also stores dimensions in the reverse order
|
|
||||||
|
// Fetch the dimension, increment it by 1, and put it on the stack;
|
||||||
|
// confirmed with original ROM, that it also stores dimensions in the reverse order
|
||||||
|
|
||||||
jsr fetch_uint16
|
jsr fetch_uint16
|
||||||
bcs_16 do_SYNTAX_error
|
bcs_16 do_SYNTAX_error
|
||||||
|
|
||||||
// XXX we probably need to increment LINNUM first
|
#if !HAS_OPCODES_65CE02
|
||||||
|
inc LINNUM+0
|
||||||
|
bne !+
|
||||||
|
inc LINNUM+1
|
||||||
|
!:
|
||||||
|
#else
|
||||||
|
inw LINNUM
|
||||||
|
#endif
|
||||||
|
|
||||||
|
beq_16 do_OUT_OF_MEMORY_error
|
||||||
|
|
||||||
lda LINNUM+0
|
lda LINNUM+0
|
||||||
pha
|
pha
|
||||||
@@ -144,7 +155,7 @@ array_create_store_dims_done:
|
|||||||
// Restore FOUR6, calculate number of bytes needed for storage
|
// Restore FOUR6, calculate number of bytes needed for storage
|
||||||
|
|
||||||
pha
|
pha
|
||||||
sta FOUR6 // XXX do we need to store this value in FOUR6?
|
sta FOUR6 // XXX do we need to store this value in FOUR6? is it still needed?
|
||||||
sta __FAC1+2
|
sta __FAC1+2
|
||||||
stx __FAC1+3 // .X is 0 at this point
|
stx __FAC1+3 // .X is 0 at this point
|
||||||
|
|
||||||
@@ -152,15 +163,76 @@ array_create_store_dims_done:
|
|||||||
|
|
||||||
// XXX check if we have enough memory
|
// XXX check if we have enough memory
|
||||||
|
|
||||||
// XXX retrieve and store array name
|
// Retrieve and store array name
|
||||||
|
|
||||||
// XXX calculate and store offset to the next array
|
ldy #$00
|
||||||
|
|
||||||
// XXX clear area
|
#if CONFIG_MEMORY_MODEL_60K
|
||||||
|
|
||||||
// XXX adjust STREND
|
// XXX
|
||||||
|
// XXX: implement this
|
||||||
|
// XXX
|
||||||
|
|
||||||
// XXX adjust offset of the previous array
|
#else // CONFIG_MEMORY_MODEL_38K || CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
|
||||||
|
|
||||||
|
pla
|
||||||
|
sta (STREND), y
|
||||||
|
iny
|
||||||
|
pla
|
||||||
|
sta (STREND), y
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Calculate and store offset to the next array
|
||||||
|
|
||||||
|
lda #$02
|
||||||
|
jsr helper_INDEX_up_A
|
||||||
|
|
||||||
|
#if CONFIG_MEMORY_MODEL_60K
|
||||||
|
|
||||||
|
// XXX
|
||||||
|
// XXX: implement this
|
||||||
|
// XXX
|
||||||
|
|
||||||
|
#elif CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
|
||||||
|
|
||||||
|
// XXX
|
||||||
|
// XXX: implement this
|
||||||
|
// XXX
|
||||||
|
|
||||||
|
#else // CONFIG_MEMORY_MODEL_38K
|
||||||
|
|
||||||
|
ldy #$04
|
||||||
|
lda (STREND), y
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
asl
|
||||||
|
jsr helper_INDEX_up_A
|
||||||
|
|
||||||
|
#if CONFIG_MEMORY_MODEL_60K
|
||||||
|
|
||||||
|
// XXX
|
||||||
|
// XXX: implement this
|
||||||
|
// XXX
|
||||||
|
|
||||||
|
#else // CONFIG_MEMORY_MODEL_38K || CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
|
||||||
|
|
||||||
|
ldy #$02
|
||||||
|
lda INDEX+0
|
||||||
|
sta (STREND), y
|
||||||
|
iny
|
||||||
|
lda INDEX+1
|
||||||
|
sta (STREND), y
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Clear newly alocated area
|
||||||
|
|
||||||
|
// XXX implement this
|
||||||
|
|
||||||
|
// Adjust STREND
|
||||||
|
|
||||||
|
// XXX implement this
|
||||||
|
|
||||||
jmp do_NOT_IMPLEMENTED_error
|
jmp do_NOT_IMPLEMENTED_error
|
||||||
|
|
||||||
@@ -54,14 +54,14 @@ helper_array_create_mul_error:
|
|||||||
helper_array_create_mul_success:
|
helper_array_create_mul_success:
|
||||||
|
|
||||||
lda INDEX+0
|
lda INDEX+0
|
||||||
sta __FAC+0
|
sta __FAC1+0
|
||||||
lda INDEX+1
|
lda INDEX+1
|
||||||
sta __FAC+1
|
sta __FAC1+1
|
||||||
|
|
||||||
plx_trash_a
|
plx_trash_a
|
||||||
rts
|
rts
|
||||||
|
|
||||||
helper_array_create_mul_add:
|
helper_array_create_mul_8x8_add:
|
||||||
|
|
||||||
jsr mul_FAC2_FAC1_8x8
|
jsr mul_FAC2_FAC1_8x8
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// #LAYOUT# * * #IGNORE
|
// #LAYOUT# * * #IGNORE
|
||||||
|
|
||||||
//
|
//
|
||||||
// Helper routine, used by garbage collector and string concatenation
|
// Helper routine, used in several places
|
||||||
//
|
//
|
||||||
|
|
||||||
#if CONFIG_MEMORY_MODEL_38K || CONFIG_MEMORY_MODEL_60K
|
#if CONFIG_MEMORY_MODEL_38K || CONFIG_MEMORY_MODEL_60K
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
// This has to go $E000 or above - it can be used by routines which bank out the main BASIC ROM!
|
// This has to go $E000 or above - it can be used by routines which bank out the main BASIC ROM!
|
||||||
|
|
||||||
//
|
//
|
||||||
// Helper routine, used by garbage collector and string concatenation
|
// Helper routine, used in several places
|
||||||
//
|
//
|
||||||
|
|
||||||
#if CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
|
#if CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
|
||||||
|
|||||||
Reference in new issue
Block a user