fixed mising shift memory implementation for memory models 46K and 50K
This commit is contained in:
1 parent
3fd5300d57
commit
a4d9679019
12 files changed
+209
-114
No files matched your search
@@ -25,6 +25,7 @@ SRCDIR_BASIC = $(SRCDIR_COMMON) \
|
|||||||
c64/basic/math \
|
c64/basic/math \
|
||||||
c64/basic/math_consts \
|
c64/basic/math_consts \
|
||||||
c64/basic/math_mov \
|
c64/basic/math_mov \
|
||||||
|
c64/basic/memory \
|
||||||
c64/basic/print \
|
c64/basic/print \
|
||||||
c64/basic/rom_revision \
|
c64/basic/rom_revision \
|
||||||
c64/basic/tokenizer \
|
c64/basic/tokenizer \
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,72 +0,0 @@
|
|||||||
// #LAYOUT# STD * #TAKE
|
|
||||||
// #LAYOUT# * BASIC_0 #TAKE
|
|
||||||
// #LAYOUT# * * #IGNORE
|
|
||||||
|
|
||||||
// XXX extend build_segment tool to allow to specify placement range
|
|
||||||
|
|
||||||
|
|
||||||
#if CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
|
|
||||||
|
|
||||||
|
|
||||||
peek_under_roms_via_TXTPTR:
|
|
||||||
|
|
||||||
// Unmap BASIC lower ROM
|
|
||||||
|
|
||||||
lda #$26
|
|
||||||
sta CPU_R6510
|
|
||||||
|
|
||||||
// Retrieve value from under ROMs
|
|
||||||
|
|
||||||
lda (TXTPTR), y
|
|
||||||
|
|
||||||
// FALLTROUGH
|
|
||||||
|
|
||||||
peek_under_roms_finalize:
|
|
||||||
|
|
||||||
// Restore memory mapping
|
|
||||||
|
|
||||||
pha
|
|
||||||
lda #$27
|
|
||||||
sta CPU_R6510
|
|
||||||
pla
|
|
||||||
|
|
||||||
// Quit
|
|
||||||
|
|
||||||
rts
|
|
||||||
|
|
||||||
peek_under_roms_via_OLDTXT:
|
|
||||||
|
|
||||||
// Unmap BASIC lower ROM
|
|
||||||
|
|
||||||
lda #$26
|
|
||||||
sta CPU_R6510
|
|
||||||
|
|
||||||
// Retrieve value from under ROMs
|
|
||||||
|
|
||||||
lda (OLDTXT), y
|
|
||||||
|
|
||||||
#if HAS_OPCODES_65C02
|
|
||||||
bra peek_under_roms_finalize
|
|
||||||
#else
|
|
||||||
jmp peek_under_roms_finalize
|
|
||||||
#endif
|
|
||||||
|
|
||||||
peek_under_roms_via_FAC1_PLUS_1:
|
|
||||||
|
|
||||||
// Unmap BASIC lower ROM
|
|
||||||
|
|
||||||
lda #$26
|
|
||||||
sta CPU_R6510
|
|
||||||
|
|
||||||
// Retrieve value from under ROMs
|
|
||||||
|
|
||||||
lda (__FAC1 + 1), y
|
|
||||||
|
|
||||||
#if HAS_OPCODES_65C02
|
|
||||||
bra peek_under_roms_finalize
|
|
||||||
#else
|
|
||||||
jmp peek_under_roms_finalize
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -0,0 +1,148 @@
|
|||||||
|
// #LAYOUT# STD * #TAKE
|
||||||
|
// #LAYOUT# * BASIC_0 #TAKE
|
||||||
|
// #LAYOUT# * * #IGNORE
|
||||||
|
|
||||||
|
// XXX This can be any address - but definitely $E000 or above
|
||||||
|
// XXX TODO: extend build_segment tool to allow to specify placement range
|
||||||
|
|
||||||
|
|
||||||
|
#if CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K
|
||||||
|
|
||||||
|
|
||||||
|
peek_under_roms_via_TXTPTR:
|
||||||
|
|
||||||
|
// Unmap BASIC lower ROM
|
||||||
|
|
||||||
|
lda #$26
|
||||||
|
sta CPU_R6510
|
||||||
|
|
||||||
|
// Retrieve value from under ROMs
|
||||||
|
|
||||||
|
lda (TXTPTR), y
|
||||||
|
|
||||||
|
// FALLTROUGH
|
||||||
|
|
||||||
|
peek_under_roms_finalize:
|
||||||
|
|
||||||
|
// Restore memory mapping
|
||||||
|
|
||||||
|
pha
|
||||||
|
lda #$27
|
||||||
|
sta CPU_R6510
|
||||||
|
pla
|
||||||
|
|
||||||
|
// Quit
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
peek_under_roms_via_OLDTXT:
|
||||||
|
|
||||||
|
// Unmap BASIC lower ROM
|
||||||
|
|
||||||
|
lda #$26
|
||||||
|
sta CPU_R6510
|
||||||
|
|
||||||
|
// Retrieve value from under ROMs
|
||||||
|
|
||||||
|
lda (OLDTXT), y
|
||||||
|
|
||||||
|
#if HAS_OPCODES_65C02
|
||||||
|
bra peek_under_roms_finalize
|
||||||
|
#else
|
||||||
|
jmp peek_under_roms_finalize
|
||||||
|
#endif
|
||||||
|
|
||||||
|
peek_under_roms_via_FAC1_PLUS_1:
|
||||||
|
|
||||||
|
// Unmap BASIC lower ROM
|
||||||
|
|
||||||
|
lda #$26
|
||||||
|
sta CPU_R6510
|
||||||
|
|
||||||
|
// Retrieve value from under ROMs
|
||||||
|
|
||||||
|
lda (__FAC1 + 1), y
|
||||||
|
|
||||||
|
#if HAS_OPCODES_65C02
|
||||||
|
bra peek_under_roms_finalize
|
||||||
|
#else
|
||||||
|
jmp peek_under_roms_finalize
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
shift_mem_up:
|
||||||
|
|
||||||
|
// Move __memmove_size bytes from __memmove_src to __memmove_dst,
|
||||||
|
// where __memmove_dst > __memmove_src
|
||||||
|
// This means we have to copy from the back end down.
|
||||||
|
// This routine assumes the pointers are already pointed
|
||||||
|
// to the end of the areas, and that Y is correctly initialised
|
||||||
|
// to allow the copy to begin.
|
||||||
|
|
||||||
|
// Unmap BASIC lower ROM
|
||||||
|
|
||||||
|
php
|
||||||
|
|
||||||
|
lda #$26
|
||||||
|
sta CPU_R6510
|
||||||
|
|
||||||
|
// Perform the copying
|
||||||
|
!:
|
||||||
|
lda (__memmove_src),y
|
||||||
|
sta (__memmove_dst),y
|
||||||
|
dey
|
||||||
|
bne !-
|
||||||
|
dec __memmove_src+1
|
||||||
|
dec __memmove_dst+1
|
||||||
|
dec __memmove_size+1
|
||||||
|
bne !-
|
||||||
|
|
||||||
|
#if HAS_OPCODES_65C02
|
||||||
|
bra shift_mem_finalize
|
||||||
|
#else
|
||||||
|
jmp shift_mem_finalize
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
shift_mem_down:
|
||||||
|
|
||||||
|
// Move __memmove_size bytes from __memmove_src to __memmove_dst,
|
||||||
|
// where __memmove_dst > __memmove_src
|
||||||
|
// This means we have to copy from the back end down.
|
||||||
|
// This routine assumes the pointers are already pointed
|
||||||
|
// to the end of the areas, and that Y is correctly initialised
|
||||||
|
// to allow the copy to begin.
|
||||||
|
|
||||||
|
// Unmap BASIC lower ROM
|
||||||
|
|
||||||
|
php
|
||||||
|
|
||||||
|
lda #$26
|
||||||
|
sta CPU_R6510
|
||||||
|
|
||||||
|
// Perform the copying
|
||||||
|
!:
|
||||||
|
lda (__memmove_src),y
|
||||||
|
sta (__memmove_dst),y
|
||||||
|
iny
|
||||||
|
bne !-
|
||||||
|
inc __memmove_src+1
|
||||||
|
inc __memmove_dst+1
|
||||||
|
dec __memmove_size+1
|
||||||
|
bne !-
|
||||||
|
// FALLTROUGH
|
||||||
|
|
||||||
|
shift_mem_finalize:
|
||||||
|
|
||||||
|
// Restore memory mapping and quit
|
||||||
|
|
||||||
|
lda #$27
|
||||||
|
sta CPU_R6510
|
||||||
|
|
||||||
|
plp
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
// #LAYOUT# STD * #TAKE
|
||||||
|
// #LAYOUT# * BASIC_0 #TAKE
|
||||||
|
// #LAYOUT# * * #IGNORE
|
||||||
|
|
||||||
|
|
||||||
|
#if CONFIG_MEMORY_MODEL_38K
|
||||||
|
|
||||||
|
shift_mem_down:
|
||||||
|
|
||||||
|
// Move __memmove_size bytes from __memmove_src to __memmove_dst,
|
||||||
|
// where __memmove_dst > __memmove_src
|
||||||
|
// This means we have to copy from the back end down.
|
||||||
|
// This routine assumes the pointers are already pointed
|
||||||
|
// to the end of the areas, and that Y is correctly initialised
|
||||||
|
// to allow the copy to begin.
|
||||||
|
|
||||||
|
php
|
||||||
|
!:
|
||||||
|
lda (__memmove_src),y
|
||||||
|
sta (__memmove_dst),y
|
||||||
|
iny
|
||||||
|
bne !-
|
||||||
|
inc __memmove_src+1
|
||||||
|
inc __memmove_dst+1
|
||||||
|
dec __memmove_size+1
|
||||||
|
bne !-
|
||||||
|
plp
|
||||||
|
rts
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
// #LAYOUT# STD * #TAKE
|
||||||
|
// #LAYOUT# * BASIC_0 #TAKE
|
||||||
|
// #LAYOUT# * * #IGNORE
|
||||||
|
|
||||||
|
|
||||||
|
#if CONFIG_MEMORY_MODEL_38K
|
||||||
|
|
||||||
|
shift_mem_up:
|
||||||
|
|
||||||
|
// Move __memmove_size bytes from __memmove_src to __memmove_dst,
|
||||||
|
// where __memmove_dst > __memmove_src
|
||||||
|
// This means we have to copy from the back end down.
|
||||||
|
// This routine assumes the pointers are already pointed
|
||||||
|
// to the end of the areas, and that Y is correctly initialised
|
||||||
|
// to allow the copy to begin.
|
||||||
|
|
||||||
|
php
|
||||||
|
!:
|
||||||
|
lda (__memmove_src),y
|
||||||
|
sta (__memmove_dst),y
|
||||||
|
dey
|
||||||
|
bne !-
|
||||||
|
dec __memmove_src+1
|
||||||
|
dec __memmove_dst+1
|
||||||
|
dec __memmove_size+1
|
||||||
|
bne !-
|
||||||
|
plp
|
||||||
|
rts
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -113,46 +113,4 @@ smd1:
|
|||||||
|
|
||||||
__ram_routines_end:
|
__ram_routines_end:
|
||||||
|
|
||||||
#else // CONFIG_MEMORY_MODEL_60K
|
|
||||||
|
|
||||||
shift_mem_up:
|
|
||||||
// Move __memmove_size bytes from __memmove_src to __memmove_dst,
|
|
||||||
// where __memmove_dst > __memmove_src
|
|
||||||
// This means we have to copy from the back end down.
|
|
||||||
// This routine assumes the pointers are already pointed
|
|
||||||
// to the end of the areas, and that Y is correctly initialised
|
|
||||||
// to allow the copy to begin.
|
|
||||||
php
|
|
||||||
smu1:
|
|
||||||
lda (__memmove_src),y
|
|
||||||
sta (__memmove_dst),y
|
|
||||||
dey
|
|
||||||
bne smu1
|
|
||||||
dec __memmove_src+1
|
|
||||||
dec __memmove_dst+1
|
|
||||||
dec __memmove_size+1
|
|
||||||
bne smu1
|
|
||||||
plp
|
|
||||||
rts
|
|
||||||
|
|
||||||
shift_mem_down:
|
|
||||||
// Move __memmove_size bytes from __memmove_src to __memmove_dst,
|
|
||||||
// where __memmove_dst > __memmove_src
|
|
||||||
// This means we have to copy from the back end down.
|
|
||||||
// This routine assumes the pointers are already pointed
|
|
||||||
// to the end of the areas, and that Y is correctly initialised
|
|
||||||
// to allow the copy to begin.
|
|
||||||
php
|
|
||||||
smd1:
|
|
||||||
lda (__memmove_src),y
|
|
||||||
sta (__memmove_dst),y
|
|
||||||
iny
|
|
||||||
bne smd1
|
|
||||||
inc __memmove_src+1
|
|
||||||
inc __memmove_dst+1
|
|
||||||
dec __memmove_size+1
|
|
||||||
bne smd1
|
|
||||||
plp
|
|
||||||
rts
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
Reference in new issue
Block a user