diff runtime.S @ 348:3923dbc2dcc4

m68k_trap is now replaced with a generated one so it can call the generated memory acccess functions. The old static memory access functions have been removed from runtime.S
author Mike Pavone <pavone@retrodev.com>
date Tue, 21 May 2013 01:10:04 -0700
parents b24556b45d1e
children 8e136187c0e0
line wrap: on
line diff
--- a/runtime.S	Tue May 21 00:56:56 2013 -0700
+++ b/runtime.S	Tue May 21 01:10:04 2013 -0700
@@ -44,37 +44,6 @@
 	pop %rsi
 	call m68k_load_context
 	ret
-	
-	.global m68k_trap
-m68k_trap:
-	push %rdi
-	push %rcx
-	/* swap USP and SSP if not already in supervisor mode */
-	bt $5, 5(%rsi)
-	jc already_supervisor_trap
-	mov 72(%rsi), %edi
-	mov %r15d, 72(%rsi)
-	mov %edi, %r15d
-already_supervisor_trap:
-	/* save PC */
-	sub $4, %r15d
-	mov %r15d, %edi
-	pop %rcx
-	call m68k_write_long_lowfirst
-	/* save status register on stack */
-	sub $2, %r15d
-	mov %r15d, %edi
-	call get_sr
-	call m68k_write_word
-	/* set supervisor bit */
-	or $0x20, 5(%rsi)
-	/* calculate interrupt vector address */
-	pop %rcx
-	shl $2, %ecx
-	call m68k_read_long_scratch1
-	call m68k_native_addr_and_sync
-	add $18, %eax
-	jmp *%rcx
 
 invalid_msg:
 	.asciz "Invalid instruction at %X\n"
@@ -145,17 +114,6 @@
 	
 	mov %rdi, %rax
 	ret
-	
-int_dbg_msg:
-	.asciz "Executing Interrupt!"
-print_int_dbg:
-	call m68k_save_context
-	push %rsi
-	lea int_dbg_msg(%rip), %rdi
-	call puts
-	pop %rsi
-	call m68k_load_context
-	ret
 
 	.global get_sr
 get_sr:
@@ -210,322 +168,6 @@
 	and $1, %cl
 	mov %cl, (%rsi)
 	ret
-
-do_vdp_port_write:
-	call m68k_save_context
-	mov %rcx, %rdx
-	call vdp_port_write
-	mov %rax, %rsi
-	call m68k_load_context
-	ret
-
-do_vdp_port_read:
-	mov %ecx, %edi
-	call m68k_save_context
-	push %rsi
-	call vdp_port_read
-	pop %rsi
-	mov %ax, %cx
-	call m68k_load_context
-	ret
-	
-do_io_write:
-	call m68k_save_context
-	and $0x1FFFF, %edi
-	mov %ecx, %edx
-	call io_write
-	mov %rax, %rsi
-	call m68k_load_context
-	ret
-do_io_read:
-	mov %ecx, %edi
-	and $0x1FFFF, %edi
-	call m68k_save_context
-	push %rsi
-	call io_read
-	pop %rsi
-	mov %al, %cl
-	call m68k_load_context
-	ret
-
-do_io_write_w:
-	call m68k_save_context
-	and $0x1FFFF, %edi
-	mov %ecx, %edx
-	call io_write_w
-	mov %rax, %rsi
-	call m68k_load_context
-	ret
-do_io_read_w:
-	mov %ecx, %edi
-	and $0x1FFFF, %edi
-	call m68k_save_context
-	push %rsi
-	call io_read_w
-	pop %rsi
-	mov %ax, %cx
-	call m68k_load_context
-	ret
-	
-bad_access_msg:
-	.asciz "Program tried to access illegal 68K address %X\n"
-	
-	.global m68k_write_word
-	.global try_fifo_write
-m68k_write_word:
-	call inccycles
-	and $0xFFFFFF, %rdi
-	cmp $0x400000, %edi
-	jbe cart_w
-	cmp $0xE00000, %edi
-	jae workram_w
-	cmp $0xC00000, %edi
-	jae vdp_psg_w
-	cmp $0xA00000, %edi
-	jb not_io_w
-	cmp $0xA12000, %edi
-	jae not_io_w
-	jmp do_io_write_w
-not_io_w:
-	ret
-workram_w:
-	and $0xFFFF, %edi
-	mov %cx, (%r9, %rdi)
-	mov %edi, %ecx
-	shr $11, %ecx
-	bt %ecx, 160(%rsi)
-	jnc not_code
-	call m68k_save_context
-	call m68k_handle_code_write
-	mov %rax, %rsi
-	call m68k_load_context
-not_code:
-	ret
-cart_w:
-	mov %cx, (%r8, %rdi)
-	ret
-vdp_psg_w:
-	test $0x2700E0, %edi
-	jnz crash
-	and $0x1F, %edi
-	cmp $4, %edi
-	jb try_fifo_write
-	jmp do_vdp_port_write
-try_fifo_write:
-	push %rdx
-	push %rbx
-	/* fetch VDP context pointer from 68K context */
-	mov 128(%rsi), %rdx
-	/* check DMA flag */
-	bt $6, 19(%rdx)
-	jc fifo_fallback
-	/* get fifo_cur and compare it to fifo_end */
-	mov (%rdx), %rbx
-	cmp %rbx, 8(%rdx)
-	/* bail out if fifo is full */
-	je fifo_fallback
-	/* populate FIFO entry */
-	mov %cx, 6(%rbx) /* value */
-	mov 16(%rdx), %cx
-	mov %cx, 4(%rbx) /* address */
-	mov 18(%rdx), %cl
-	mov %cl, 8(%rbx) /* cd */
-	movb $0, 9(%rbx) /* partial */
-	mov %eax, %ecx
-	shl $3, %ecx /* multiply by 68K cycle by 7 to get MCLK cycle */
-	sub %eax, %ecx
-	mov %ecx, (%rbx) /* cycle */
-	/* update fifo_cur and store back in 68K context */
-	add $12, %rbx
-	mov %rbx, (%rdx)
-	/* update address register */
-	movzbw 35(%rdx), %bx
-	add %bx, 16(%rdx)
-	/* clear pending flag */
-	andb $0xEF, 19(%rdx)
-	pop %rbx
-	pop %rdx
-	ret
-fifo_fallback:
-	pop %rbx
-	pop %rdx
-	jmp do_vdp_port_write
-crash:
-	mov %edi, %esi
-	lea bad_access_msg(%rip), %rdi
-	xor %rax, %rax
-	call printf
-	mov $1, %rdi
-	call exit
-
-	.global m68k_write_byte
-m68k_write_byte:
-	call inccycles
-	and $0xFFFFFF, %rdi
-	cmp $0x400000, %edi
-	jbe cart_wb
-	cmp $0xE00000, %edi
-	jae workram_wb
-	cmp $0xC00000, %edi
-	jae vdp_psg_wb
-	cmp $0xA00000, %edi
-	jb not_io_wb
-	cmp $0xA12000, %edi
-	jae not_io_wb
-	jmp do_io_write
-not_io_wb:
-	ret
-workram_wb:
-	/* deal with byte swapping */
-	xor $1, %edi
-	and $0xFFFF, %rdi
-	mov %cl, (%r9, %rdi)
-	mov %edi, %ecx
-	shr $11, %ecx
-	bt %ecx, 160(%rsi)
-	jnc not_code_b
-	xor $1, %edi
-	call m68k_save_context
-	call m68k_handle_code_write
-	mov %rax, %rsi
-	call m68k_load_context
-not_code_b:
-	ret
-cart_wb:
-	/* deal with byte swapping */
-	xor $1, %edi
-	mov %cl, (%r8, %rdi)
-	ret
-vdp_psg_wb:
-	push %rdx
-	mov %cl, %dl
-	and $0xFF, %cx
-	shl $8, %dx
-	or %dx, %cx
-	pop %rdx
-	jmp vdp_psg_w
-
-	.global m68k_write_long_lowfirst
-m68k_write_long_lowfirst:
-	push %rdi
-	push %rcx
-	add $2, %edi
-	call m68k_write_word
-	pop %rcx
-	pop %rdi
-	shr $16, %ecx
-	jmp m68k_write_word
-
-	.global m68k_write_long_highfirst
-m68k_write_long_highfirst:
-	push %rdi
-	push %rcx
-	shr $16, %ecx
-	call m68k_write_word
-	pop %rcx
-	pop %rdi
-	add $2, %rdi
-	jmp m68k_write_word
-	
-inccycles:
-	cmp %ebp, %eax
-	jnb do_limit
-	add $4, %eax
-	ret
-do_limit:	
-	call handle_cycle_limit
-	add $4, %eax
-	ret
-
-	.global m68k_read_word_scratch1
-m68k_read_word_scratch1:
-	call inccycles
-	and $0xFFFFFF, %rcx
-	cmp $0x400000, %ecx
-	jbe cart
-	cmp $0xE00000, %ecx
-	jae workram
-	cmp $0xC00000, %ecx
-	jae vdp_psg
-	cmp $0xA00000, %ecx
-	jb not_io
-	cmp $0xA12000, %ecx
-	jae not_io
-	call do_io_read_w
-	ret
-not_io:
-	xor %cx, %cx
-	dec %cx
-	ret
-workram:
-	and $0xFFFF, %rcx
-	mov (%r9, %rcx), %cx
-	ret
-vdp_psg:
-	test $0x2700E0, %ecx
-	jnz crash
-	and $0x1F, %ecx
-	jmp do_vdp_port_read
-cart:
-	mov (%r8, %rcx), %cx
-	ret
-	
-	.global m68k_read_long_scratch1
-m68k_read_long_scratch1:
-	push %rcx
-	call m68k_read_word_scratch1
-	mov %cx, %di
-	pop %rcx
-	add $2, %ecx
-	push %rdi
-	call m68k_read_word_scratch1
-	pop %rdi
-	and $0xFFFF, %ecx
-	shl $16, %edi
-	or %edi, %ecx
-	ret
-
-	.global m68k_read_byte_scratch1
-m68k_read_byte_scratch1:
-	call inccycles
-	and $0xFFFFFF, %rcx
-	cmp $0x400000, %ecx
-	jbe cart_b
-	cmp $0xE00000, %ecx
-	jae workram_b
-	cmp $0xC00000, %ecx
-	jae vdp_psg_b
-	cmp $0xA00000, %ecx
-	jb not_io_b
-	cmp $0xA12000, %ecx
-	jae not_io_b
-	jmp do_io_read
-not_io_b:
-	xor %cl, %cl
-	dec %cl
-	ret
-vdp_psg_b:
-	test $0x2700E0, %ecx
-	jnz crash
-	and $0x1F, %ecx
-	bt $0, %ecx
-	jnc vdp_swap
-	jmp do_vdp_port_read
-vdp_swap:
-	call do_vdp_port_read
-	shr $8, %cx
-	ret
-workram_b:
-	/* deal with byte swapping */
-	xor $1, %ecx
-	and $0xFFFF, %rcx
-	mov (%r9, %rcx), %cl
-	ret
-cart_b:
-	/* deal with byte swapping */
-	xor $1, %ecx
-	mov (%r8, %rcx), %cl
-	ret
 	
 	.global m68k_modified_ret_addr
 m68k_modified_ret_addr:
@@ -533,9 +175,6 @@
 	call m68k_native_addr
 	jmp *%rcx
 
-dyn_addr_msg:
-	.asciz "Program needs dynamically calculated native address\n"
-	
 	.global m68k_native_addr_and_sync
 m68k_native_addr_and_sync:
 	call m68k_save_context