97 lines
1.3 KiB
ArmAsm
97 lines
1.3 KiB
ArmAsm
// #LAYOUT# STD * #TAKE
|
|
// #LAYOUT# * BASIC_0 #TAKE
|
|
// #LAYOUT# * * #IGNORE
|
|
|
|
|
|
#if ROM_LAYOUT_M65
|
|
|
|
cmd_nsys:
|
|
|
|
// NSYS requires an argument
|
|
|
|
jsr is_end_of_statement
|
|
bcs_16 do_SYNTAX_error
|
|
bra cmd_sys_nsys_common
|
|
|
|
#endif
|
|
|
|
cmd_sys:
|
|
|
|
// SYS requires an argument
|
|
|
|
jsr is_end_of_statement
|
|
bcs_16 do_SYNTAX_error
|
|
|
|
#if ROM_LAYOUT_M65
|
|
|
|
// Make sure we are in C64 compatibility mode
|
|
|
|
jsr M65_ISMODE65
|
|
bcs cmd_sys_nsys_common
|
|
jsr M65_MODE64
|
|
|
|
// FALLTROUGH
|
|
|
|
cmd_sys_nsys_common:
|
|
|
|
#endif
|
|
|
|
//
|
|
// XXX Temporary ugly hack to support 'SYS PI*656'
|
|
//
|
|
|
|
ldy #$00
|
|
|
|
cmd_sys_hack_loop:
|
|
lda (TXTPTR), y
|
|
cmp cmd_sys_hack_str, y
|
|
bne cmd_sys_hack_not_needed
|
|
lda (TXTPTR), y
|
|
beq cmd_sys_hack_apply
|
|
iny
|
|
bne cmd_sys_hack_loop // branch always
|
|
|
|
cmd_sys_hack_apply:
|
|
|
|
lda #<2060
|
|
sta LINNUM+0
|
|
lda #>2060
|
|
sta LINNUM+1
|
|
bne cmd_sys_setup_call // always jumps
|
|
|
|
cmd_sys_hack_not_needed:
|
|
|
|
//
|
|
// XXX End of hack
|
|
//
|
|
|
|
lda #IDX__EV2_0B // 'SYNTAX ERROR'
|
|
jsr fetch_uint16
|
|
bcs_16 do_SYNTAX_error
|
|
|
|
cmd_sys_setup_call:
|
|
lda #$4C // JMP opcode
|
|
sta USRPOK
|
|
lda LINNUM+0
|
|
sta USRADD+0
|
|
lda LINNUM+1
|
|
sta USRADD+1
|
|
|
|
// Setup the register values
|
|
lda SPREG
|
|
pha
|
|
ldy SYREG
|
|
ldx SXREG
|
|
lda SAREG
|
|
plp
|
|
|
|
// Call the routine.
|
|
jmp USRPOK
|
|
|
|
//
|
|
// XXX Temporary ugly hack to support 'SYS PI*656'
|
|
//
|
|
|
|
cmd_sys_hack_str:
|
|
.byte $FF, $AC, $36, $35, $36, $00
|