speed optimizations in BASIC, small DOS cleanup

This commit is contained in:
FeralChild64 committed 2020-09-20 22:17:26 +02:00
1 parent fc8385b109
commit a744fd0230
6 files changed
+97 -28

No files matched your search

@@ -248,29 +248,33 @@ execute_line:
ldy #$02
!ifdef CONFIG_MEMORY_MODEL_60K {
ldx #<OLDTXT
jsr peek_under_roms
} else ifdef CONFIG_MEMORY_MODEL_46K_OR_50K {
jsr peek_under_roms_via_OLDTXT ; XXX! speed-optimize - combine whole flow into one routine
} else { ; CONFIG_MEMORY_MODEL_38K
lda (OLDTXT),y
}
sta CURLIN+0
iny
!ifdef CONFIG_MEMORY_MODEL_60K {
jsr peek_under_roms
} else ifdef CONFIG_MEMORY_MODEL_46K_OR_50K {
jsr peek_under_roms_via_OLDTXT
} else { ; CONFIG_MEMORY_MODEL_38K
lda (OLDTXT),y
}
sta CURLIN+1
jmp execute_statements
} else ifdef CONFIG_MEMORY_MODEL_46K_OR_50K {
jmp helper_execute_line_statements
} else { ; CONFIG_MEMORY_MODEL_38K
lda (OLDTXT),y
sta CURLIN+0
iny
lda (OLDTXT),y
sta CURLIN+1
jmp execute_statements
}
execute_statements_var_assign:
@@ -2,29 +2,30 @@
;; #LAYOUT# * BASIC_0 #TAKE
;; #LAYOUT# * * #IGNORE
!ifndef CONFIG_MEMORY_MODEL_46K_OR_50K {
follow_link_to_next_line:
ldy #0
; XXX! for models 46K/50K provide optimized version
!ifdef CONFIG_MEMORY_MODEL_60K {
ldx #<OLDTXT+0
jsr peek_under_roms
} else ifdef CONFIG_MEMORY_MODEL_46K_OR_50K {
jsr peek_under_roms_via_OLDTXT
} else { ; CONFIG_MEMORY_MODEL_38K
lda (OLDTXT),y
}
pha
iny
!ifdef CONFIG_MEMORY_MODEL_60K {
jsr peek_under_roms
} else ifdef CONFIG_MEMORY_MODEL_46K_OR_50K {
jsr peek_under_roms_via_OLDTXT
} else { ; CONFIG_MEMORY_MODEL_38K
lda (OLDTXT),y
pha
iny
lda (OLDTXT),y
}
@@ -33,3 +34,4 @@ follow_link_to_next_line:
sta OLDTXT+0
rts
}
@@ -0,0 +1,31 @@
;; #LAYOUT# STD * #TAKE-HIGH
;; #LAYOUT# * BASIC_0 #TAKE-HIGH
;; #LAYOUT# * * #IGNORE
; This has to go $E000 or above - routine below banks out the main BASIC ROM!
!ifdef CONFIG_MEMORY_MODEL_46K_OR_50K {
follow_link_to_next_line:
; Unmap BASIC lower ROM
lda #$26
sta CPU_R6510
ldy #0
lda (OLDTXT), y
pha
iny
lda (OLDTXT), y
sta OLDTXT+1
pla
sta OLDTXT+0
// Restore default mapping and quit
jmp remap_BASIC
}
@@ -0,0 +1,32 @@
;; #LAYOUT# STD * #TAKE-HIGH
;; #LAYOUT# * BASIC_0 #TAKE-HIGH
;; #LAYOUT# * * #IGNORE
; This has to go $E000 or above - routine below banks out the main BASIC ROM!
!ifdef CONFIG_MEMORY_MODEL_46K_OR_50K {
helper_execute_line_statements:
; Unmap BASIC lower ROM
lda #$26
sta CPU_R6510
; Update CURLIN
lda (OLDTXT), y
sta CURLIN+0
iny
lda (OLDTXT), y
sta CURLIN+1
; Restore memory mapping and continue
lda #$27
sta CPU_R6510
jmp execute_statements
}