From c0bc79d64a1e11d8008f24f063e65b144f3a6067 Mon Sep 17 00:00:00 2001 From: User Date: Tue, 14 Jan 2025 08:29:08 +0000 Subject: [PATCH] Patches to run with gcc --- examples/megapong/entry.S | 154 ++++++++++++++--------------- examples/megapong/stdlib.S | 21 ++++ libs/megadrive-graphics/src/lib.rs | 2 +- libs/megadrive-util/src/panic.rs | 5 +- share/ldscripts/megadrive.x | 8 +- 6 files changed, 119 insertions(+), 85 deletions(-) create mode 100644 examples/megapong/compile.sh create mode 100644 examples/megapong/stdlib.S diff --git a/examples/megapong/entry.S b/examples/megapong/entry.S index e5343ed..2543eb0 100644 --- a/examples/megapong/entry.S +++ b/examples/megapong/entry.S @@ -6,91 +6,91 @@ .set HBLANK, _int .set VBLANK, _vblank -.long 0x0 ; Initial Stack Address -.long START ; Start of program Code -.long INT ; Bus error -.long INT ; Address error -.long INT ; Illegal instruction -.long INT ; Division by zero -.long INT ; CHK exception -.long INT ; TRAPV exception -.long INT ; Privilage violation -.long INT ; TRACE exception -.long INT ; Line-A emulator -.long INT ; Line-F emulator -.long INT ; Reserved (NOT USED) -.long INT ; Co-processor protocol violation -.long INT ; Format error -.long INT ; Uninitialized Interrupt -.long INT ; Reserved (NOT USED) -.long INT ; Reserved (NOT USED) -.long INT ; Reserved (NOT USED) -.long INT ; Reserved (NOT USED) -.long INT ; Reserved (NOT USED) -.long INT ; Reserved (NOT USED) -.long INT ; Reserved (NOT USED) -.long INT ; Reserved (NOT USED) -.long INT ; Spurious Interrupt -.long INT ; IRQ Level 1 -.long INT ; IRQ Level 2 (EXT Interrupt) -.long INT ; IRQ Level 3 -.long HBLANK ; IRQ Level 4 (VDP Horizontal Interrupt) -.long INT ; IRQ Level 5 -.long VBLANK ; IRQ Level 6 (VDP Vertical Interrupt) -.long INT ; IRQ Level 7 -.long INT ; TRAP #00 Exception -.long INT ; TRAP #01 Exception -.long INT ; TRAP #02 Exception -.long INT ; TRAP #03 Exception -.long INT ; TRAP #04 Exception -.long INT ; TRAP #05 Exception -.long INT ; TRAP #06 Exception -.long INT ; TRAP #07 Exception -.long INT ; TRAP #08 Exception -.long INT ; TRAP #09 Exception -.long INT ; TRAP #10 Exception -.long INT ; TRAP #11 Exception -.long INT ; TRAP #12 Exception -.long INT ; TRAP #13 Exception -.long INT ; TRAP #14 Exception -.long INT ; TRAP #15 Exception -.long INT ; (FP) Branch or Set on Unordered Condition -.long INT ; (FP) Inexact Result -.long INT ; (FP) Divide by Zero -.long INT ; (FP) Underflow -.long INT ; (FP) Operand Error -.long INT ; (FP) Overflow -.long INT ; (FP) Signaling NAN -.long INT ; (FP) Unimplemented Data Type -.long INT ; MMU Configuration Error -.long INT ; MMU Illegal Operation Error -.long INT ; MMU Access Violation Error -.long INT ; Reserved (NOT USED) -.long INT ; Reserved (NOT USED) -.long INT ; Reserved (NOT USED) -.long INT ; Reserved (NOT USED) -.long INT ; Reserved (NOT USED) +.long 0x0 +.long START +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long HBLANK +.long INT +.long VBLANK +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT +.long INT -.ascii "SEGA MEGADRIVE " ; SEGA must be the first four chars for TMSS +.ascii "SEGA MEGADRIVE " .ascii "(C)2021.JAN " -.ascii "TESTPROJECT " ; export name +.ascii "TESTPROJECT " .ascii " " .ascii " " -.ascii "TESTPROJECT " ; domestic (Japanese) name +.ascii "TESTPROJECT " .ascii " " .ascii " " .ascii "GM MK-0000 -01" -.short 0x0000 ; checksum - not needed +.short 0x0000 .ascii "J6 " -.long 0x00000000, 0x0007ffff ; ROM start, end -.long 0x00ff0000, 0x00ffffff ; RAM start, end -.ascii " " ; no SRAM +.long 0x00000000, 0x0007ffff +.long 0x00ff0000, 0x00ffffff +.ascii " " .ascii " " .ascii " " -.ascii " " ; memo +.ascii " " .ascii " " .ascii " " -.ascii "F " ; enable any hardware configuration +.ascii "F " .global vblank _vblank: @@ -100,14 +100,14 @@ _vblank: .global _start .global main _start: - move.l #_stack_top, sp - move.w #0x2500, sr + move.l #_stack_top, %sp + move.w #0x2500, %sr jsr _init_runtime - bra #main + bra main .global abort abort: - bra #abort + bra abort _int: rte diff --git a/examples/megapong/stdlib.S b/examples/megapong/stdlib.S new file mode 100644 index 0000000..b614ed5 --- /dev/null +++ b/examples/megapong/stdlib.S @@ -0,0 +1,25 @@ +.text + +.global memcpy +memcpy: + rts + +.global memcmp +memcmp: + rts + +.global memset +memset: + rts + +.global _Unwind_Resume +_Unwind_Resume: + rts + +.global rust_eh_personality +rust_eh_personality: + rts + +.global __mulsi3 +__mulsi3: + rts diff --git a/libs/megadrive-graphics/src/lib.rs b/libs/megadrive-graphics/src/lib.rs index d7aa284..5e7f929 100644 --- a/libs/megadrive-graphics/src/lib.rs +++ b/libs/megadrive-graphics/src/lib.rs @@ -5,7 +5,7 @@ use core::mem::MaybeUninit; use megadrive_sys::vdp::{Sprite, VDP}; pub mod default_ascii { - include!(concat!(env!("OUT_DIR"), "/default_ascii.rs")); + // include!(concat!(env!("OUT_DIR"), "/default_ascii.rs")); } mod font; diff --git a/libs/megadrive-util/src/panic.rs b/libs/megadrive-util/src/panic.rs index 8564bbd..edb1663 100644 --- a/libs/megadrive-util/src/panic.rs +++ b/libs/megadrive-util/src/panic.rs @@ -3,7 +3,6 @@ use core::ptr::read_volatile; use megadrive_sys::vdp::VDP; use megadrive_graphics::Renderer; -use megadrive_graphics::default_ascii::DEFAULT_FONT_1X1; static mut NEW_FRAME: u16 = 0; @@ -19,7 +18,7 @@ fn panic(_info: &PanicInfo) -> ! { vdp.enable_display(true); // Initialize the default font tiles - DEFAULT_FONT_1X1.load(&mut vdp); + // DEFAULT_FONT_1X1.load(&mut vdp); let resolution = vdp.resolution(); let half_screen_width = (resolution.0 >> 1) as i16; @@ -36,7 +35,7 @@ fn panic(_info: &PanicInfo) -> ! { // let mut panic_text: &str = &_info.payload().downcast_ref::<&str>().unwrap(); let panic_text= "Panic!"; - DEFAULT_FONT_1X1.blit_text(&mut renderer, panic_text, x_off as u16, y_off as u16); + // DEFAULT_FONT_1X1.blit_text(&mut renderer, panic_text, x_off as u16, y_off as u16); renderer.render(&mut vdp); // vsync wait_for_vblank(); diff --git a/share/ldscripts/megadrive.x b/share/ldscripts/megadrive.x index 95e1cf3..c6d91ae 100644 --- a/share/ldscripts/megadrive.x +++ b/share/ldscripts/megadrive.x @@ -22,19 +22,19 @@ SECTIONS .data : { - ALIGN(4); + . = ALIGN(4); _data_start = .; *(.data); - ALIGN(4); + . = ALIGN(4); _data_end = .; } > RAM AT > ROM .bss (NOLOAD) : { - ALIGN(4); + . = ALIGN(4); _bss_start = .; *(.bss); - ALIGN(4); + . = ALIGN(4); _bss_end = .; } > RAM AT > ROM -- 2.34.1