home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dream 55
/
Amiga_Dream_55.iso
/
RISCOS
/
MAGAZINE
/
NEWS
/
PCE021.ZIP
/
Pce021
/
Src
/
s
/
interface
next >
Wrap
Text File
|
1998-07-24
|
5KB
|
285 lines
; interface.s
; -----------
; Simple command line interface to PC Engine emulator
GET hdr.SWINames
GET hdr.defines
GET cpu.hdr.workspace
AREA |!!interface$$code|, CODE, READONLY
EXPORT Claim_Memory
EXPORT Claim_Zero_Memory
IMPORT Run_CPU_Core
IMPORT CPU_Initialise
IMPORT Memory_Initialise
IMPORT VDC_Initialise
IMPORT VDC_Finalise
IMPORT Joypad_Initialise
IMPORT Joypad_Finalise
IMPORT PSG_Initialise
IMPORT PSG_Finalise
IMPORT PSG_Disable
IMPORT PSG_Disable_Address
IMPORT Timer_StartIncrement
IMPORT Timer_StopIncrement
IMPORT Timer_SetSpeed
ENTRY
ldr r4, adrof_memory_status
mov r0, #0 ; MemoryLimit
mov r1, #0
swi OS_ChangeEnvironment
ldr r0, adrof_program_end
stmia r4, {r0, r1}
ldr r13, adrof_stack_end
swi OS_GetEnv
mov r1, r0
adr r0, keyword_definition
sub r2, r13, #1024
mov r3, #1024
swi XOS_ReadArgs
adrvs r0, syntax
bvs Show_Error
ldr r0, [r2, #4] ; turbografx switch
cmp r0, #0 ; off?
movne r0, #0x40 ; no
ldr r1, adrof_machine
str r0, [r1, #0] ; store machine value
ldr r0, [r2, #12]
cmp r0, #0
movne r0, #1
ldr r1, =nosound_flag
str r0, [r1, #0]
ldrne r0, =PSG_Disable_Address
ldrne r1, =PSG_Disable
strne r0, [r1, #0]
ldr r0, [r2, #16]
; cmp r0, #0
; movne r0, #1
mov r0, #1
ldr r1, =vsync_flag
str r0, [r1, #0]
; beq No_MHzTimer
add r0, r1, #4
bl Timer_StartIncrement
mov r0, #0x4100
orr r0, r0, #0x1a
bl Timer_SetSpeed
sub r2, r13, #1024
;No_MHzTimer
ldr data, adrof_cpu_emulation_data
mov r0, #17
ldr r1, [r2, #20]
swi OS_File
cmp r0, #1
adrne r0, bad_file
bne Show_Error
mov r7, r4
mov r6, r4
bl Claim_Memory
str r6, [data, #rom_address]
mov r0, #16
mov r2, r6
mov r3, #0
swi OS_File
ldr r0, [data, #rom_address]
ldrb r1, [r0, #0]
sub r2, r7, r1, lsl #13
subs r2, r2, #512
addeq r0, r0, #512
subeq r7, r7, #512
streq r0, [data, #rom_address]
movne r1, r7, lsr #13
; cmp r1, #0xf6
; adrgt r0, oversized_file
; bgt Show_Error
str r7, [data, #rom_size]
mov r6, #0x2000
bl Claim_Zero_Memory
str r6, [data, #bram_address]
mov r6, #0x8000
bl Claim_Zero_Memory
str r6, [data, #ram_address]
bl Memory_Initialise
bl PSG_Initialise
ldr r4, adrof_handler_data
mov r0, #11 ; exit handler
adr r1, Exit_Handler
mov r2, r4
mov r3, #0
swi OS_ChangeEnvironment
mov r3, r1
stmia r4!, {r2, r3}
; mov r0, #9 ; escape handler
; adr r1, Escape_Handler
; mov r2, r4
; mov r3, #0
; swi OS_ChangeEnvironment
; mov r3, r1
; stmia r4!, {r2, r3}
bl VDC_Initialise
bl Joypad_Initialise
bl CPU_Initialise
b Run_CPU_Core
Show_Error
mov r1, #0
mov r2, #0
swi OS_PrettyPrint
swi OS_Exit
Exit_Handler
stmfd r13!, {r0, r11-r12, r14}
ldr r0, =vsync_flag
ldr r1, [r0], #4
cmp r1, #0
blne Timer_StopIncrement
bl PSG_Finalise
bl VDC_Finalise
bl Joypad_Finalise
ldmfd r13!, {r0, r11-r12, r14}
ldmia r12, {r12, pc}
;Escape_Handler
; swi OS_Exit
Claim_Memory
; entry
; r6 = amount to claim
; exit
; r6 = pointer to memory
; all other registers preserved
stmfd r13!, {r0-r3, r14}
ldr r3, adrof_memory_status
ldmia r3, {r0, r1}
add r6, r6, #3
bic r6, r6, #3
add r0, r0, r6
sub r6, r0, r6
cmp r0, r1
movgt r1, r0
addgt r1, r1, #16 * 1024
stmia r3, {r0, r1}
movgt r0, #0 ; MemoryLimit
swigt OS_ChangeEnvironment
ldmfd r13!, {r0-r3, pc}^
Claim_Zero_Memory
; entry
; r6 = amount to claim
; exit
; r6 = pointer to memory
; all other registers preserved
stmfd r13!, {r0-r2, r14}
mov r1, r6
bl Claim_Memory
mov r0, r6
add r1, r1, r6
mov r2, #0
Zero_Loop
str r2, [r0], #4
cmp r0, r1
blt Zero_Loop
ldmfd r13!, {r0-r2, pc}^
keyword_definition
= "/a,us/s,jp/s,nosound/s,vsync/s,/a", 0
ALIGN
syntax
= "pcengine v0.20 (30 May 1998) by Paul Clifford (paul@plasma.demon.co.uk)", 13, 13
= "Syntax: pcengine [options] <rom filename>", 13, 13
= "-us", 9, 9, "Emulate a TurboGrafx 16 [default]", 13
= "-jp", 9, 9, "Emulate a PC Engine", 13
= "-nosound", 9, "Disable sound", 13
; = "-vsync", 9, 9, "Lock frame rate to vsync", 13
= 0
ALIGN
bad_file
= "Cannot load specified file", 13
= 0
ALIGN
oversized_file
= "File is too big - are you sure it is a ROM image?", 13
= 0
ALIGN
adrof_program_end
DCD program_end
adrof_stack_end
DCD stack_end
adrof_handler_data
DCD handler_data
adrof_machine
DCD machine
adrof_memory_status
DCD memory_status
IMPORT cpu_emulation_data
adrof_cpu_emulation_data
DCD cpu_emulation_data
AREA |!!interface$$data|, DATA
EXPORT handler_data
handler_data
DCD 0
DCD 0
DCD 0
DCD 0
EXPORT machine
machine
DCD 0
EXPORT memory_status
memory_status
DCD 0
DCD 0
vsync_flag
EXPORT vsync_flag
DCD 0
DCD 0
nosound_flag
EXPORT nosound_flag
DCD 0
AREA |!!interface$$zidata|, NOINIT
EXPORT stack_end
% 1024
stack_end
AREA |zzz$zidata|, NOINIT
EXPORT program_end
ALIGN
program_end
END