implement SYS command.

This commit is contained in:
Paul Gardner-Stephen committed 2019-04-29 23:02:22 +09:30
1 parent 0d891bb06a
commit 8ecd10d5cd
4 files changed
+42 -2

No files matched your search

+6
View File
@@ -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
+32
View File
@@ -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
-1
View File
@@ -29,7 +29,6 @@ cmd_printhash:
cmd_print:
cmd_cont:
cmd_cmd:
cmd_sys:
cmd_open:
;; $A0-$AF
+4 -1
View File
@@ -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