implement SYS command.
This commit is contained in:
1 parent
0d891bb06a
commit
8ecd10d5cd
4 files changed
+42
-2
No files matched your search
@@ -126,6 +126,12 @@
|
||||
.alias screen_scroll_disable $0292
|
||||
.alias pal_or_ntsc $02A6
|
||||
|
||||
;; Registers for SYS call
|
||||
.alias sys_reg_a $30c
|
||||
.alias sys_reg_x $30d
|
||||
.alias sys_reg_y $30e
|
||||
.alias sys_reg_p $30f
|
||||
.alias sys_jmp $310
|
||||
|
||||
;; BASIC uses some extra bytes for memory access under ROMs located at $2A7 onwards
|
||||
;; IRQs are disabled when doing such accesses, and a default NMI handler only increments
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
cmd_sys:
|
||||
|
||||
jsr basic_end_of_statement_check
|
||||
bcc +
|
||||
|
||||
;; SYS requires an argument
|
||||
ldx #10
|
||||
jmp do_basic_error
|
||||
|
||||
*
|
||||
jsr basic_parse_line_number
|
||||
|
||||
;; setup call
|
||||
lda #$4c ;JMP
|
||||
sta sys_jmp
|
||||
lda basic_line_number+0
|
||||
sta sys_jmp+1
|
||||
lda basic_line_number+1
|
||||
sta sys_jmp+2
|
||||
|
||||
;; Setup the register values
|
||||
lda sys_reg_p
|
||||
pha
|
||||
lda sys_reg_a
|
||||
ldx sys_reg_x
|
||||
ldy sys_reg_y
|
||||
plp
|
||||
|
||||
;; Call the routine.
|
||||
jsr sys_jmp
|
||||
|
||||
jmp basic_run_next_statement
|
||||
@@ -29,7 +29,6 @@ cmd_printhash:
|
||||
cmd_print:
|
||||
cmd_cont:
|
||||
cmd_cmd:
|
||||
cmd_sys:
|
||||
cmd_open:
|
||||
|
||||
;; $A0-$AF
|
||||
|
||||
@@ -59,6 +59,9 @@ injest_number:
|
||||
;; Set sign to negative
|
||||
lda #$ff
|
||||
sta basic_fac1_sign
|
||||
|
||||
;; Skip over the minus sign
|
||||
jsr basic_consume_character
|
||||
|
||||
ij_not_minus:
|
||||
|
||||
@@ -68,7 +71,7 @@ ij_loop1:
|
||||
lda (basic_current_statement_ptr),y
|
||||
cmp #$30
|
||||
bcc ij_not_a_digit
|
||||
cmp #$39
|
||||
cmp #$3a
|
||||
bcs ij_not_a_digit
|
||||
|
||||
;; It is a digit
|
||||
|
||||
Reference in new issue
Block a user