reorganized extended BASIC tokens
This commit is contained in:
1 parent
f2b7abfdb9
commit
678c38a3e0
47 files changed
+235
-260
No files matched your search
@@ -31,6 +31,10 @@ Since Open ROMs is highly modular, it should be possible to add other platforms
|
||||
|
||||
Select if the ROM is going to be used exclusively on the specified motherboard. It prevents from enabling options not having sense, skips initialization of C128-only registers, and enables motherboard-specific features.
|
||||
|
||||
### `ROM_CRT`
|
||||
|
||||
Has to be set for builds utilizing cartridge image as a ROM extension.
|
||||
|
||||
## Brand
|
||||
|
||||
Branding is only allowed for C64 platform, if no motherboard is specified.
|
||||
|
||||
@@ -15,10 +15,10 @@ SRCDIR_BASIC = $(SRCDIR_COMMON) \
|
||||
src/basic/assets \
|
||||
src/basic/basic_commands \
|
||||
src/basic/basic_commands_01 \
|
||||
src/basic/basic_commands_02 \
|
||||
src/basic/basic_commands_03_m65 \
|
||||
src/basic/basic_commands_04 \
|
||||
src/basic/basic_operators \
|
||||
src/basic/basic_functions \
|
||||
src/basic/basic_functions_06 \
|
||||
src/basic/board_crt \
|
||||
src/basic/board_m65 \
|
||||
src/basic/board_x16 \
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ For Ultimate 64 motherboard the following settings are recommended:
|
||||
|
||||
<br />
|
||||
|
||||
The generic_crt ROM set is a special version of generic set, with some code moved to external ROM on the cartridge - thus, more features could be enabled. It needs all the 3 files (BASIC, Kernal, cartridge) to be operable.
|
||||
The \*\_crt ROM set is a special version, with some code moved to external ROM on the cartridge - thus, more features could be enabled. It needs all the 3 files (BASIC, Kernal, cartridge) to be operable.
|
||||
|
||||
<br />
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+15
-13
@@ -78,19 +78,21 @@ Make sure to read the main [README](../README.md) first - although any help with
|
||||
|
||||
List of the most important make targets:
|
||||
|
||||
| target | description |
|
||||
| :------------------ | :------------------------------------------------------------------------------ |
|
||||
| `all` | builds all ROMs, places them in 'build' subdirectory |
|
||||
| `clean` | removes all the compilation results and intermediate files |
|
||||
| `updatebin` | upates ROMs in 'bin' subdirectory - with embedded version string, for release |
|
||||
| `testsimilarity` | launches the similarity tool, see [README](../README.md) |
|
||||
| `test` | builds the 'custom' configuration, launches it using VICE emulator |
|
||||
| `test_generic` | builds the default ROMs, for generic C64/C128, launches using VICE |
|
||||
| `test_generic_x128` | as above, but launches C128 emulator instead |
|
||||
| `test_mega65` | builds the MEGA65 ROM, launches it using XEMU emulator |
|
||||
| `test_ultimate64` | builds the Ultimate 64 configuration, launches it using VICE emulator |
|
||||
| `test_hybrid` | builds a hybrid ROM (Open ROMs Kernal + original BASIC), launches it using VICE |
|
||||
| `test_testing` | builds a rather odd testing configuration, launches it using VICE emulator |
|
||||
| target | description |
|
||||
| :-------------------- | :------------------------------------------------------------------------------ |
|
||||
| `all` | builds all ROMs, places them in 'build' subdirectory |
|
||||
| `clean` | removes all the compilation results and intermediate files |
|
||||
| `updatebin` | upates ROMs in 'bin' subdirectory - with embedded version string, for release |
|
||||
| `testsimilarity` | launches the similarity tool, see [README](../README.md) |
|
||||
| `test` | builds the 'custom' configuration, launches it using VICE emulator |
|
||||
| `test_generic` | builds the default ROMs, for generic C64/C128, launches using VICE |
|
||||
| `test_generic_x128` | as above, but launches C128 emulator instead |
|
||||
| `test_generic_crt` | builds the default ROM with extended cartridge image, launches using VICE |
|
||||
| `test_mega65` | builds the MEGA65 ROM, launches it using XEMU emulator |
|
||||
| `test_ultimate64` | builds the Ultimate 64 configuration, launches it using VICE |
|
||||
| `test_ultimate64_crt` | as above, ROM with extended cartriodge image |
|
||||
| `test_hybrid` | builds a hybrid ROM (Open ROMs Kernal + original BASIC), launches it using VICE |
|
||||
| `test_testing` | builds a rather odd testing configuration, launches it using VICE |
|
||||
|
||||
|
||||
### Code segments and ROM layouts
|
||||
|
||||
@@ -53,19 +53,19 @@ Launches a built-in tape head alignment tool. Destroys program in memory. Press
|
||||
* if tape format autodetection is compiled-in, you can load file from tape using either device #1 (CBM compatible way) or from device #7 (in a way compatible with *Final* and *Action Replay* cartridges)
|
||||
* if autodetection is not available, than device #1 means normal CBM format, and device #7 means *Turbo Tape 64* format
|
||||
|
||||
### `MERGE "file_name" [, device_number]` (all)
|
||||
### `MERGE "file_name" [, device_number]` (cart, MEGA65)
|
||||
|
||||
Appends the BASIC program from a storage medium to the one currently present in memory.
|
||||
|
||||
### `BLOAD "file_name", device_number, start_address` (all)
|
||||
### `BLOAD "file_name", device_number, start_address` (cart, MEGA65)
|
||||
|
||||
Loads a binary file starting from the given memory location. Does not clear variables, does not perform BASIC program relinking, etc. NOTE: for now syntax differs from the BASIC V3.5+ - this will be changed once the necessary BASIC infrastructure is implemented.
|
||||
|
||||
### `BVERIFY "file_name", device_number, start_address` (all)
|
||||
### `BVERIFY "file_name", device_number, start_address` (cart, MEGA65)
|
||||
|
||||
Verify operation for the binary data starting from a given addres. NOTE: for now syntax differs from the BASIC V3.5+ - this will be changed once the necessary BASIC infrastructure is implemented.
|
||||
|
||||
### `BSAVE "file_name", device_number, start_address, end_address` (all)
|
||||
### `BSAVE "file_name", device_number, start_address, end_address` (cart, MEGA65)
|
||||
|
||||
Saves the binary data from the given memory area. NOTE: for now syntax differs from the BASIC V3.5+ - this will be changed once the necessary BASIC infrastructure is implemented.
|
||||
|
||||
@@ -77,7 +77,7 @@ Resets the machine. In direct mode asks for confirmation first.
|
||||
|
||||
### `FAST`, `SLOW` (all)
|
||||
|
||||
Tries to switch the machine to turbo mode (or back to 1MHz operation mode) - details differ depending on the configured machine / motherboard. On MEGA65 motherboard this is not available in native mode, it is not designed to run in 1MHz due to using compound CPU instructions.
|
||||
Tries to switch the machine to turbo mode (or back to 1MHz operation mode) - details differ depending on the configured machine / motherboard. On MEGA65 motherboard this is not available in native mode, it is not designed to run in 1MHz due to using compound CPU instructions usage.
|
||||
|
||||
### `OLD` (all)
|
||||
|
||||
@@ -96,11 +96,11 @@ Displays BASIC memory usage information:
|
||||
|
||||
Displays various system information.
|
||||
|
||||
### `CLEAR` (all)
|
||||
### `CLEAR` (cart, MEGA65)
|
||||
|
||||
Clears the screen content.
|
||||
|
||||
### `DISPOSE` (all)
|
||||
### `DISPOSE` (cart, MEGA65)
|
||||
|
||||
Runs the garbage collector - disposes outdated strings.
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
; Idea:
|
||||
; - sane defaults for the Ultimate 64 FPGA computer
|
||||
; - use RetroRelplay cartridge image as a ROM extension
|
||||
; - do not enable features which are a significant compatibility risk
|
||||
|
||||
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
;; #LAYOUT# STD * #TAKE
|
||||
;; #LAYOUT# CRT BASIC_1 #TAKE
|
||||
;; #LAYOUT# M65 BASIC_1 #TAKE
|
||||
;; #LAYOUT# X16 BASIC_0 #TAKE
|
||||
;; #LAYOUT# * * #IGNORE
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
|
||||
packed_freq_keywords_02:
|
||||
|
||||
+PUT_PACKED_FREQ_keywords_02
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
;; #LAYOUT# STD * #TAKE
|
||||
;; #LAYOUT# CRT BASIC_1 #TAKE
|
||||
;; #LAYOUT# M65 BASIC_1 #TAKE
|
||||
;; #LAYOUT# X16 BASIC_0 #TAKE
|
||||
;; #LAYOUT# * * #IGNORE
|
||||
|
||||
!ifdef CONFIG_MB_M65 {
|
||||
|
||||
packed_freq_keywords_03:
|
||||
|
||||
+PUT_PACKED_FREQ_keywords_03
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
;; #LAYOUT# M65 BASIC_1 #TAKE
|
||||
;; #LAYOUT# * * #IGNORE
|
||||
|
||||
|
||||
packed_freq_keywords_04:
|
||||
|
||||
+PUT_PACKED_FREQ_keywords_04
|
||||
@@ -0,0 +1,7 @@
|
||||
;; #LAYOUT# M65 BASIC_1 #TAKE
|
||||
;; #LAYOUT# * * #IGNORE
|
||||
|
||||
|
||||
packed_freq_keywords_06:
|
||||
|
||||
+PUT_PACKED_FREQ_keywords_06
|
||||
@@ -6,33 +6,42 @@
|
||||
; Jumptable for BASIC commands with tokens prefixed by $01
|
||||
;
|
||||
|
||||
!set ITEM_01 = cmd_slow
|
||||
!set ITEM_02 = cmd_fast
|
||||
!set ITEM_03 = cmd_old
|
||||
|
||||
!set ITEM_00 = cmd_slow
|
||||
!set ITEM_01 = cmd_fast
|
||||
!set ITEM_02 = cmd_old
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
|
||||
; NOTE! These commands are temporarily placed here, they should be a part of list 02!
|
||||
!set ITEM_04 = cmd_clear
|
||||
!set ITEM_05 = varstr_garbage_collect ; cmd_dispose
|
||||
!set ITEM_06 = cmd_merge
|
||||
!set ITEM_07 = cmd_bload
|
||||
!set ITEM_08 = cmd_bsave
|
||||
!set ITEM_09 = cmd_bverify
|
||||
!set ITEM_0A = cmd_cold
|
||||
!set ITEM_0B = cmd_mem
|
||||
|
||||
!set ITEM_03 = cmd_merge
|
||||
}
|
||||
|
||||
!set ITEM_04 = cmd_bload
|
||||
!set ITEM_05 = cmd_bsave
|
||||
!set ITEM_06 = cmd_bverify
|
||||
|
||||
!set ITEM_07 = cmd_clear
|
||||
!set ITEM_08 = varstr_garbage_collect ; cmd_dispose
|
||||
|
||||
|
||||
!ifndef HAS_OPCODES_65C02 {
|
||||
|
||||
command_01_jumptable_lo:
|
||||
|
||||
!byte <(ITEM_00-1), <(ITEM_01-1), <(ITEM_02-1), <(ITEM_03-1), <(ITEM_04-1), <(ITEM_05-1), <(ITEM_06-1), <(ITEM_07-1), <(ITEM_08-1)
|
||||
!byte <(ITEM_01-1), <(ITEM_02-1), <(ITEM_03-1)
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
!byte <(ITEM_04-1), <(ITEM_05-1), <(ITEM_06-1), <(ITEM_07-4), <(ITEM_08-1), <(ITEM_09-1), <(ITEM_0A-1), <(ITEM_0B-1)
|
||||
}
|
||||
|
||||
command_01_jumptable_hi:
|
||||
|
||||
!byte >(ITEM_00-1), >(ITEM_01-1), >(ITEM_02-1), >(ITEM_03-1), >(ITEM_04-1), >(ITEM_05-1), >(ITEM_06-1), >(ITEM_07-1), >(ITEM_08-1)
|
||||
!byte >(ITEM_01-1), >(ITEM_02-1), >(ITEM_03-1)
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
!byte >(ITEM_04-1), >(ITEM_05-1), >(ITEM_06-1), >(ITEM_07-4), >(ITEM_08-1), >(ITEM_09-1), >(ITEM_0A-1), >(ITEM_0B-1)
|
||||
}
|
||||
|
||||
} else { ; HAS_OPCODES_65C02
|
||||
|
||||
@@ -40,5 +49,10 @@ command_01_jumptable:
|
||||
|
||||
; Note: 65C02 has the page boundary vector bug fixed!
|
||||
|
||||
!word ITEM_00, ITEM_01, ITEM_02, ITEM_03, ITEM_04, ITEM_05, ITEM_06, ITEM_07, ITEM_08
|
||||
!word ITEM_01, ITEM_02, ITEM_03
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
!word ITEM_04, ITEM_05, ITEM_06, ITEM_07, ITEM_08, ITEM_09, ITEM_0A, ITEM_0B
|
||||
}
|
||||
|
||||
}
|
||||
+3
@@ -3,6 +3,8 @@
|
||||
;; #LAYOUT# * * #IGNORE
|
||||
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
|
||||
cmd_bverify:
|
||||
|
||||
; LOAD and VERIFY are very similar, from BASIC perspective there is almost no difference;
|
||||
@@ -40,3 +42,4 @@ cmd_bload:
|
||||
; Execute next statement
|
||||
|
||||
rts
|
||||
}
|
||||
@@ -3,6 +3,8 @@
|
||||
;; #LAYOUT# * * #IGNORE
|
||||
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
|
||||
cmd_bsave:
|
||||
|
||||
; Set default device and secondary address
|
||||
@@ -40,3 +42,4 @@ cmd_bsave:
|
||||
; Perform SAVE - reuse regular command
|
||||
|
||||
jmp cmd_save_do
|
||||
}
|
||||
@@ -3,8 +3,11 @@
|
||||
;; #LAYOUT# * * #IGNORE
|
||||
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
|
||||
cmd_clear:
|
||||
|
||||
; XXX in the future add separate implementation for graphics screen
|
||||
|
||||
jmp clear_screen
|
||||
}
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -3,6 +3,8 @@
|
||||
;; #LAYOUT# * * #IGNORE
|
||||
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
|
||||
cmd_merge:
|
||||
|
||||
lda #$00 ; mark operation as LOAD
|
||||
@@ -45,3 +47,4 @@ cmd_merge_no_error:
|
||||
; Relink loaded program, clear variables, execute next statement
|
||||
|
||||
jmp update_LINKPRG_VARTAB_do_clr
|
||||
}
|
||||
File renamed without changes.
+3
@@ -7,6 +7,8 @@
|
||||
;
|
||||
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
|
||||
helper_bload_fetch_address:
|
||||
|
||||
jsr injest_comma
|
||||
@@ -20,3 +22,4 @@ helper_bload_fetch_address:
|
||||
ldy LINNUM+1
|
||||
|
||||
rts
|
||||
}
|
||||
+3
@@ -7,6 +7,8 @@
|
||||
;
|
||||
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
|
||||
helper_bload_fetch_filename:
|
||||
|
||||
; Fetch the file name
|
||||
@@ -24,3 +26,4 @@ helper_bload_fetch_filename:
|
||||
sta FNLEN
|
||||
@1:
|
||||
rts
|
||||
}
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -1,49 +0,0 @@
|
||||
;; #LAYOUT# STD * #TAKE
|
||||
;; #LAYOUT# * BASIC_0 #TAKE
|
||||
;; #LAYOUT# * * #IGNORE
|
||||
|
||||
;
|
||||
; Jumptable for BASIC commands with tokens prefixed by $02
|
||||
;
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
|
||||
; NOTE! These commands are temporarily placed in list 01!
|
||||
|
||||
; cmd_merge,
|
||||
|
||||
; cmd_bload,
|
||||
; cmd_bsave,
|
||||
; cmd_bverify,
|
||||
|
||||
; cmd_clear,
|
||||
; varstr_garbage_collect, ; cmd_dispose
|
||||
|
||||
!set ITEM_00 = cmd_cold
|
||||
!set ITEM_01 = cmd_mem
|
||||
|
||||
!ifdef CONFIG_MB_M65 {
|
||||
!set ITEM_02 = cmd_sysinfo
|
||||
}
|
||||
|
||||
!ifndef HAS_OPCODES_65C02 {
|
||||
|
||||
command_02_jumptable_lo:
|
||||
|
||||
!byte <(ITEM_00-1), <(ITEM_01-1)
|
||||
!ifdef CONFIG_MB_M65 { !byte <(ITEM_02-1) }
|
||||
|
||||
command_02_jumptable_hi:
|
||||
|
||||
!byte >(ITEM_00-1), >(ITEM_01-1)
|
||||
!ifdef CONFIG_MB_M65 { !byte >(ITEM_02-1) }
|
||||
|
||||
} else { ; HAS_OPCODES_65C02
|
||||
|
||||
command_02_jumptable:
|
||||
|
||||
; Note: 65C02 has the page boundary vector bug fixed!
|
||||
|
||||
!word ITEM_00, ITEM_01
|
||||
!ifdef CONFIG_MB_M65 { !word ITEM_02 }
|
||||
} }
|
||||
@@ -1,15 +0,0 @@
|
||||
;; #LAYOUT# M65 BASIC_0 #TAKE
|
||||
;; #LAYOUT# * * #IGNORE
|
||||
|
||||
;
|
||||
; Jumptable for BASIC commands with tokens prefixed by $03
|
||||
;
|
||||
|
||||
!set ITEM_00 = cmd_rem ; XXX just for testing
|
||||
|
||||
|
||||
command_03_jumptable:
|
||||
|
||||
; Note: 65C02 has the page boundary vector bug fixed!
|
||||
|
||||
!word ITEM_00
|
||||
@@ -0,0 +1,29 @@
|
||||
;; #LAYOUT# M65 * #TAKE
|
||||
;; #LAYOUT# * * #IGNORE
|
||||
|
||||
;
|
||||
; Jumptable for BASIC commands with tokens prefixed by $04
|
||||
;
|
||||
|
||||
!set ITEM_01 = cmd_sysinfo
|
||||
|
||||
|
||||
|
||||
!ifndef HAS_OPCODES_65C02 {
|
||||
|
||||
command_04_jumptable_lo:
|
||||
|
||||
!byte <(ITEM_01-1)
|
||||
|
||||
command_04_jumptable_hi:
|
||||
|
||||
!byte >(ITEM_01-1)
|
||||
|
||||
} else { ; HAS_OPCODES_65C02
|
||||
|
||||
command_04_jumptable:
|
||||
|
||||
; Note: 65C02 has the page boundary vector bug fixed!
|
||||
|
||||
!word ITEM_01
|
||||
}
|
||||
File renamed without changes.
@@ -0,0 +1,28 @@
|
||||
;; #LAYOUT# M65 BASIC_0 #TAKE
|
||||
;; #LAYOUT# * * #IGNORE
|
||||
|
||||
;
|
||||
; Jumptable for BASIC commands with tokens prefixed by $03
|
||||
;
|
||||
|
||||
!set ITEM_01 = do_NOT_IMPLEMENTED_error ; just for testing
|
||||
|
||||
|
||||
!ifndef HAS_OPCODES_65C02 {
|
||||
|
||||
function_06_jumptable_lo:
|
||||
|
||||
!byte <(ITEM_01-1)
|
||||
|
||||
function_06_jumptable_hi:
|
||||
|
||||
!byte >(ITEM_01-1)
|
||||
|
||||
} else { ; HAS_OPCODES_65C02
|
||||
|
||||
function_06_jumptable:
|
||||
|
||||
; Note: 65C02 has the page boundary vector bug fixed!
|
||||
|
||||
!word ITEM_01
|
||||
}
|
||||
@@ -92,26 +92,23 @@ tokenise_line_loop:
|
||||
jsr tk_search
|
||||
bcc tokenise_line_keyword_01 ; branch if keyword identified
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
|
||||
lda #<packed_freq_keywords_02
|
||||
sta FRESPC+0
|
||||
lda #>packed_freq_keywords_02
|
||||
sta FRESPC+1
|
||||
|
||||
jsr tk_search
|
||||
bcc tokenise_line_keyword_02 ; branch if keyword identified
|
||||
}
|
||||
|
||||
!ifdef CONFIG_MB_M65 {
|
||||
|
||||
lda #<packed_freq_keywords_03
|
||||
lda #<packed_freq_keywords_04
|
||||
sta FRESPC+0
|
||||
lda #>packed_freq_keywords_03
|
||||
lda #>packed_freq_keywords_04
|
||||
sta FRESPC+1
|
||||
|
||||
jsr tk_search
|
||||
bcc tokenise_line_keyword_03 ; branch if keyword identified
|
||||
bcc tokenise_line_keyword_04 ; branch if keyword identified
|
||||
|
||||
lda #<packed_freq_keywords_06
|
||||
sta FRESPC+0
|
||||
lda #>packed_freq_keywords_06
|
||||
sta FRESPC+1
|
||||
|
||||
jsr tk_search
|
||||
bcc tokenise_line_keyword_06 ; branch if keyword identified
|
||||
}
|
||||
|
||||
; Shorten packed keyword candidate and try again
|
||||
@@ -189,23 +186,18 @@ tokenise_line_char:
|
||||
|
||||
!ifdef CONFIG_MB_M65 {
|
||||
|
||||
tokenise_line_keyword_03:
|
||||
tokenise_line_keyword_04:
|
||||
|
||||
; Store the token list index
|
||||
|
||||
lda #$03
|
||||
lda #$04
|
||||
+skip_2_bytes_trash_nvz
|
||||
|
||||
; FALLTROUGH
|
||||
}
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
|
||||
tokenise_line_keyword_02:
|
||||
tokenise_line_keyword_06:
|
||||
|
||||
; Store the token list index
|
||||
|
||||
lda #$02
|
||||
lda #$06
|
||||
+skip_2_bytes_trash_nvz
|
||||
|
||||
; FALLTROUGH
|
||||
|
||||
@@ -39,23 +39,19 @@ execute_statements:
|
||||
|
||||
; Check if token is valid for execution
|
||||
|
||||
!ifdef HAS_SMALL_BASIC {
|
||||
!ifndef CONFIG_MB_M65 {
|
||||
|
||||
cpx #$01
|
||||
beq execute_statements_01
|
||||
|
||||
} else {
|
||||
|
||||
!ifdef CONFIG_MB_M65 {
|
||||
cpx #$04
|
||||
} else {
|
||||
cpx #$03
|
||||
}
|
||||
cpx #$05
|
||||
bcc execute_statements_extended
|
||||
}
|
||||
|
||||
cpx #$CB
|
||||
+beq cmd_go ; 'GO' command has a strange token, placed after function tokens
|
||||
+beq cmd_go ; 'GO' command has a strange token, placed after function tokens
|
||||
|
||||
cpx #$7F
|
||||
+bcc execute_statements_var_assign ; not a token - try variable assign
|
||||
@@ -84,25 +80,17 @@ execute_statements:
|
||||
jmp (command_jumptable, x)
|
||||
}
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
!ifdef CONFIG_MB_M65 {
|
||||
|
||||
execute_statements_extended:
|
||||
|
||||
; Support for extended BASIC commands
|
||||
|
||||
; XXX consider jumpable here
|
||||
|
||||
cpx #$01
|
||||
beq execute_statements_01
|
||||
|
||||
cpx #$02
|
||||
beq execute_statements_02
|
||||
|
||||
!ifdef CONGIH_MB_M65 {
|
||||
|
||||
cpx #$03
|
||||
beq execute_statements_03
|
||||
}
|
||||
cpx #$04
|
||||
beq execute_statements_04
|
||||
|
||||
jmp do_SYNTAX_error
|
||||
}
|
||||
@@ -141,9 +129,9 @@ execute_statements_01:
|
||||
jmp (command_01_jumptable - 2, x)
|
||||
}
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
!ifdef CONFIG_MB_M65 {
|
||||
|
||||
execute_statements_02:
|
||||
execute_statements_04:
|
||||
|
||||
; Get the sub-token, check that it is valid
|
||||
|
||||
@@ -151,7 +139,7 @@ execute_statements_02:
|
||||
cmp #$00
|
||||
+beq do_SYNTAX_error
|
||||
|
||||
cmp #(TK__MAXTOKEN_keywords_02+1)
|
||||
cmp #(TK__MAXTOKEN_keywords_04+1)
|
||||
+bcs do_SYNTAX_error
|
||||
|
||||
; Execute command
|
||||
@@ -161,9 +149,9 @@ execute_statements_02:
|
||||
; Get the jump table entry for it, push it on the stack, and then RTS to start it.
|
||||
|
||||
tax
|
||||
lda command_02_jumptable_hi - 1, x
|
||||
lda command_04_jumptable_hi - 1, x
|
||||
pha
|
||||
lda command_02_jumptable_lo - 1, x
|
||||
lda command_04_jumptable_lo - 1, x
|
||||
pha
|
||||
|
||||
rts
|
||||
@@ -174,31 +162,10 @@ execute_statements_02:
|
||||
|
||||
asl
|
||||
tax
|
||||
jmp (command_02_jumptable - 2, x)
|
||||
jmp (command_04_jumptable - 2, x)
|
||||
}
|
||||
|
||||
} ; !HAS_SMALL_BASIC
|
||||
|
||||
!ifdef CONFIG_MB_M65 {
|
||||
|
||||
execute_statements_03:
|
||||
|
||||
; Get the sub-token, check that it is valid
|
||||
|
||||
jsr fetch_character
|
||||
cmp #$00
|
||||
+beq do_SYNTAX_error
|
||||
|
||||
cmp #(TK__MAXTOKEN_keywords_03+1)
|
||||
+bcs do_SYNTAX_error
|
||||
|
||||
; Use jumptable to go to the command routine
|
||||
|
||||
asl
|
||||
tax
|
||||
jmp (command_03_jumptable - 2, x)
|
||||
|
||||
} ; CONFIG_MB_M65
|
||||
}
|
||||
|
||||
execute_statements_end_of_line:
|
||||
|
||||
|
||||
@@ -104,13 +104,11 @@ list_not_quote:
|
||||
; Check for extended BASIC tokens
|
||||
cmp #$01
|
||||
beq list_display_token_01
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
cmp #$02
|
||||
beq list_display_token_02
|
||||
}
|
||||
!ifdef CONFIG_MB_M65 {
|
||||
cmp #$03
|
||||
beq list_display_token_03
|
||||
cmp #$04
|
||||
beq list_display_token_04
|
||||
cmp #$06
|
||||
beq list_display_token_06
|
||||
}
|
||||
|
||||
; Check for literals
|
||||
@@ -232,37 +230,34 @@ list_display_token_ext_done:
|
||||
; Next iteration
|
||||
+bra list_not_rem
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
|
||||
list_display_token_02:
|
||||
|
||||
; Display a 2-byte token - for extended BASIC
|
||||
jsr list_fetch_subtoken
|
||||
|
||||
; Check if token is known
|
||||
cpx #TK__MAXTOKEN_keywords_02
|
||||
bcs list_is_unknown
|
||||
|
||||
; Now ask for it to be printed
|
||||
+phy_trash_a
|
||||
jsr print_packed_keyword_02
|
||||
+bra list_display_token_ext_done
|
||||
}
|
||||
|
||||
!ifdef CONFIG_MB_M65 {
|
||||
|
||||
list_display_token_03:
|
||||
list_display_token_04:
|
||||
|
||||
; Display a 2-byte token - for extended BASIC
|
||||
jsr list_fetch_subtoken
|
||||
|
||||
; Check if token is known
|
||||
cpx #TK__MAXTOKEN_keywords_03
|
||||
cpx #TK__MAXTOKEN_keywords_04
|
||||
bcs list_is_unknown
|
||||
|
||||
; Now ask for it to be printed
|
||||
+phy_trash_a
|
||||
jsr print_packed_keyword_03
|
||||
jsr print_packed_keyword_04
|
||||
+bra list_display_token_ext_done
|
||||
|
||||
list_display_token_06:
|
||||
|
||||
; Display a 2-byte token - for extended BASIC
|
||||
jsr list_fetch_subtoken
|
||||
|
||||
; Check if token is known
|
||||
cpx #TK__MAXTOKEN_keywords_06
|
||||
bcs list_is_unknown
|
||||
|
||||
; Now ask for it to be printed
|
||||
+phy_trash_a
|
||||
jsr print_packed_keyword_06
|
||||
+bra list_display_token_ext_done
|
||||
}
|
||||
|
||||
|
||||
@@ -59,21 +59,18 @@ print_packed_keyword_01: ; .X - token number
|
||||
ldy #>packed_freq_keywords_01
|
||||
bne print_freq_packed_string ; branch always
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
|
||||
print_packed_keyword_02: ; .X - token number
|
||||
|
||||
lda #<packed_freq_keywords_02
|
||||
ldy #>packed_freq_keywords_02
|
||||
bne print_freq_packed_string ; branch always
|
||||
}
|
||||
|
||||
!ifdef CONFIG_MB_M65 {
|
||||
|
||||
print_packed_keyword_03: ; .X - token number
|
||||
print_packed_keyword_04: ; .X - token number
|
||||
|
||||
lda #<packed_freq_keywords_03
|
||||
ldy #>packed_freq_keywords_03
|
||||
lda #<packed_freq_keywords_04
|
||||
ldy #>packed_freq_keywords_04
|
||||
bne print_freq_packed_string ; branch always
|
||||
|
||||
print_packed_keyword_06: ; .X - token number
|
||||
|
||||
lda #<packed_freq_keywords_06
|
||||
ldy #>packed_freq_keywords_06
|
||||
bne print_freq_packed_string ; branch always
|
||||
}
|
||||
|
||||
|
||||
@@ -19,8 +19,12 @@ wedge_tape:
|
||||
|
||||
cmp #$4C ; 'L'
|
||||
beq wedge_arrow_L
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
|
||||
cmp #$4D ; 'M'
|
||||
beq wedge_arrow_M
|
||||
}
|
||||
|
||||
!ifdef CONFIG_TAPE_HEAD_ALIGN {
|
||||
|
||||
@@ -68,6 +72,9 @@ wedge_arrow_L:
|
||||
|
||||
jmp cmd_load_got_params
|
||||
|
||||
|
||||
!ifndef HAS_SMALL_BASIC {
|
||||
|
||||
wedge_arrow_M:
|
||||
|
||||
jsr wedge_tape_prepare_load
|
||||
@@ -77,5 +84,6 @@ wedge_arrow_M:
|
||||
; Perform merging
|
||||
|
||||
jmp cmd_merge_got_params
|
||||
}
|
||||
|
||||
} ; CONFIG_TAPE_WEDGE
|
||||
+22
-27
@@ -174,7 +174,7 @@ const StringEntryList GLOBAL_Keywords_V2 = { ListType::KEYWORDS, "keywords_V2",
|
||||
{ true, true, true, true, true, "KV2_CB", "GO", 0 }, // https://en.wikipedia.org/wiki/Goto
|
||||
} };
|
||||
|
||||
// extended BASIC keywords - list reserved for small BASIC commands, suitable for inclusion in non-extended ROMs
|
||||
// extended BASIC keywords - list reserved for small BASIC commands, suitable for inclusion in all machines with extended ROM
|
||||
|
||||
const StringEntryList GLOBAL_Keywords_01 = { ListType::KEYWORDS, "keywords_01",
|
||||
{
|
||||
@@ -182,37 +182,33 @@ const StringEntryList GLOBAL_Keywords_01 = { ListType::KEYWORDS, "keywords_01",
|
||||
{ true, true, true, true, true, "K01_01", "SLOW", }, // https://en.wikipedia.org/wiki/Sinclair_BASIC - ZX81 variant
|
||||
{ true, true, true, true, true, "K01_02", "FAST", }, // https://en.wikipedia.org/wiki/Sinclair_BASIC - ZX81 variant
|
||||
{ true, true, true, true, true, "K01_03", "OLD", }, // Not present in CBM BASIC dialects, but common to some extensions (*)
|
||||
|
||||
// (*) see https://sourceforge.net/p/vice-emu/code/HEAD/tree/trunk/vice/src/petcat.c
|
||||
|
||||
// NOTE! These commands are temporarily placed here, they should be a part of list 02!
|
||||
|
||||
{ true, true, true, true, true, "K02_01", "MERGE", }, // Not present in CBM BASIC dialects, but common to some extensions (*)
|
||||
{ true, true, true, true, true, "K02_02", "BLOAD", }, // http://www.antonis.de/qbebooks/gwbasman/bload.html
|
||||
{ true, true, true, true, true, "K02_03", "BSAVE", }, // http://www.antonis.de/qbebooks/gwbasman/bsave.html
|
||||
{ true, true, true, true, true, "K02_04", "BVERIFY", },
|
||||
{ true, true, true, true, true, "K02_05", "CLEAR", }, // Not present in CBM BASIC dialects, Open ROMs specific
|
||||
{ true, true, true, true, true, "K02_06", "DISPOSE", }, // Not present in CBM BASIC dialects, Open ROMs specific
|
||||
} };
|
||||
|
||||
// extended BASIC keywords - list reserved for generic (mostly hardware independent) BASIC commands
|
||||
|
||||
const StringEntryList GLOBAL_Keywords_02 = { ListType::KEYWORDS, "keywords_02",
|
||||
{
|
||||
// STD CRT M65 U64 X16
|
||||
{ false, true, true, false, false, "K02_07", "COLD", }, // Not present in CBM BASIC dialects, but common to some extensions (*)
|
||||
{ false, true, true, false, false, "K02_08", "MEM", }, // Not present in CBM BASIC dialects, Open ROMs specific
|
||||
{ false, false, true, false, false, "K02_09", "SYSINFO", }, // Not present in CBM BASIC dialects, Open ROMs specific
|
||||
{ false, true, true, true, false, "K01_04", "CLEAR", }, // Not present in CBM BASIC dialects, Open ROMs specific
|
||||
{ false, true, true, true, false, "K01_05", "DISPOSE", }, // Not present in CBM BASIC dialects, Open ROMs specific
|
||||
{ false, true, true, true, false, "K01_06", "MERGE", }, // Not present in CBM BASIC dialects, but common to some extensions (*)
|
||||
{ false, true, true, true, false, "K01_07", "BLOAD", }, // http://www.antonis.de/qbebooks/gwbasman/bload.html
|
||||
{ false, true, true, true, false, "K01_08", "BSAVE", }, // http://www.antonis.de/qbebooks/gwbasman/bsave.html
|
||||
{ false, true, true, true, false, "K01_09", "BVERIFY", },
|
||||
{ false, true, true, true, false, "K01_0A", "COLD", }, // Not present in CBM BASIC dialects, but common to some extensions (*)
|
||||
{ false, true, true, true, false, "K01_0B", "MEM", }, // Not present in CBM BASIC dialects, Open ROMs specific
|
||||
|
||||
// (*) see https://sourceforge.net/p/vice-emu/code/HEAD/tree/trunk/vice/src/petcat.c
|
||||
} };
|
||||
|
||||
// extended BASIC keywords - list reserved for hardware dependent BASIC commands
|
||||
|
||||
const StringEntryList GLOBAL_Keywords_03_M65 = { ListType::KEYWORDS, "keywords_03",
|
||||
const StringEntryList GLOBAL_Keywords_04 = { ListType::KEYWORDS, "keywords_04",
|
||||
{
|
||||
// STD CRT M65 U64 X16
|
||||
{ false, false, true, false, false, "K03_01", "TEST", }, // Not present in CBM BASIC dialects, Open ROMs specific
|
||||
{ false, false, true, false, false, "K04_01", "SYSINFO", }, // Not present in CBM BASIC dialects, Open ROMs specific
|
||||
|
||||
} };
|
||||
|
||||
// extended BASIC keywords - list reserved for functions
|
||||
|
||||
const StringEntryList GLOBAL_Keywords_06 = { ListType::KEYWORDS, "keywords_06",
|
||||
{
|
||||
// STD CRT M65 U64 X16
|
||||
{ false, false, true, false, false, "K06_01", "TEST", }, // Not present in CBM BASIC dialects, Open ROMs specific
|
||||
|
||||
} };
|
||||
|
||||
@@ -1846,8 +1842,8 @@ void writeStrings()
|
||||
|
||||
dataSetM65.addStrings(GLOBAL_Keywords_V2);
|
||||
dataSetM65.addStrings(GLOBAL_Keywords_01);
|
||||
dataSetM65.addStrings(GLOBAL_Keywords_02);
|
||||
dataSetM65.addStrings(GLOBAL_Keywords_03_M65);
|
||||
dataSetM65.addStrings(GLOBAL_Keywords_04);
|
||||
dataSetM65.addStrings(GLOBAL_Keywords_06);
|
||||
dataSetM65.addStrings(GLOBAL_Errors);
|
||||
dataSetM65.addStrings(GLOBAL_MiscStrings);
|
||||
|
||||
@@ -1863,7 +1859,6 @@ void writeStrings()
|
||||
|
||||
dataSetCRT.addStrings(GLOBAL_Keywords_V2);
|
||||
dataSetCRT.addStrings(GLOBAL_Keywords_01);
|
||||
dataSetCRT.addStrings(GLOBAL_Keywords_02);
|
||||
dataSetCRT.addStrings(GLOBAL_Errors);
|
||||
dataSetCRT.addStrings(GLOBAL_MiscStrings);
|
||||
|
||||
|
||||
Reference in new issue
Block a user