From eac07282a66ce71d0403e23d0042d9c19437dd7e Mon Sep 17 00:00:00 2001 From: Nishi Date: Tue, 4 Aug 2026 20:27:51 +0900 Subject: [PATCH] update things --- CMakeLists.txt | 6 +-- runtime/crt0.s | 2 + runtime/libc.s | 104 ++++++++++++++++++++++++++++++++++++----------- runtime/string.h | 7 +++- src/main.c | 2 +- 5 files changed, 92 insertions(+), 29 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b187e77..b8d50f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.11) -project(68ksbc) +project(micro68) add_executable(m68kmake tools/m68kmake.c) @@ -8,8 +8,8 @@ list(REMOVE_ITEM SRCS ${CMAKE_CURRENT_SOURCE_DIR}/src/musashi/m68k_in.c ${CMAKE_ find_package(SDL2) -add_executable(68ksbc ${SRCS}) -target_link_libraries(68ksbc PRIVATE m SDL2::SDL2) +add_executable(micro68 ${SRCS}) +target_link_libraries(micro68 PRIVATE m SDL2::SDL2) macro(runtime NAME) add_custom_command( diff --git a/runtime/crt0.s b/runtime/crt0.s index bf45009..48b7477 100644 --- a/runtime/crt0.s +++ b/runtime/crt0.s @@ -66,11 +66,13 @@ vector_table: init: move.w #$2700,sr + ; Copy DATA lea _DATA_START,a0 lea _DATA_END,a1 lea _DATA_LOAD,a2 jsr copy + ; Clear BSS lea _BSS_START,a0 lea _BSS_END,a1 jsr clear diff --git a/runtime/libc.s b/runtime/libc.s index b72112e..d156ebc 100644 --- a/runtime/libc.s +++ b/runtime/libc.s @@ -1,26 +1,13 @@ section CODE - public _memset ;; ;; string.h ;; - - ; memset: - ; 4(sp): dst - ; 8(sp): value - ; 12(sp): int -_memset: - move.l 4(sp),a0 - move.l 8(sp),d0 - move.l 12(sp),d1 -.loop: - cmpi #0,d1 - beq.s .done - move.b d0,(a0)+ - sub #1,d1 - bra.s .loop -.done: - rts + public _memcpy + public _memset + public _strcat + public _strcpy + public _strlen ; memcpy: ; 4(sp): dst @@ -29,21 +16,92 @@ _memset: _memcpy: move.l 4(sp),a0 move.l 8(sp),a1 - move.l 12(sp),d1 + move.l 12(sp),d0 .loop: - cmpi #0,d1 + cmpi.l #0,d0 beq.s .done move.b (a1)+,(a0)+ - sub #1,d1 + sub.l #1,d0 + bra.s .loop +.done: + move.l 4(sp),d0 + rts + + ; memset: + ; 4(sp): dst + ; 8(sp): value + ; 12(sp): int +_memset: + move.l 4(sp),a0 + move.l 8(sp),d0 + move.l 12(sp),d0 +.loop: + cmpi.l #0,d0 + beq.s .done + move.b d0,(a0)+ + sub.l #1,d0 + bra.s .loop +.done: + move.l 4(sp),d0 + rts + + ; strcat: + ; 4(sp): dst + ; 8(sp): src +_strcat: + move.l 4(sp),a0 + move.l 8(sp),a1 +.loop_incr: + move.b (a0),d0 + cmpi.b #0,d0 + beq.s .loop_copy + add.l #1,a0 + bra.s .loop_incr +.loop_copy: + move.b (a1),d0 + cmpi.b #0,d0 + beq.s .done + move.b (a1)+,(a0)+ + bra.s .loop_copy +.done: + move.b #0,(a0) + move.l 4(sp),d0 + rts + + ; strcpy: + ; 4(sp): dst + ; 8(sp): src +_strcpy: + move.l 4(sp),a0 + move.l 8(sp),a1 +.loop: + move.b (a1),d0 + cmpi.b #0,d0 + beq.s .done + move.b (a1)+,(a0)+ + bra.s .loop +.done: + move.b #0,(a0) + move.l 4(sp),d0 + rts + + ; strlen: + ; 4(sp): src +_strlen: + move.l 4(sp),a0 + move.l #0,d0 +.loop: + move.b (a0)+,d1 + cmpi.b #0,d1 + beq.s .done + add.l #1,d0 bra.s .loop .done: rts - ;; ;; 32-bit div/mod: taken from vc.lib ;; - public __divu public __divs public __modu diff --git a/runtime/string.h b/runtime/string.h index 0684540..d567fbd 100644 --- a/runtime/string.h +++ b/runtime/string.h @@ -3,7 +3,10 @@ #include -void memset(void* dst, int data, int sz); -void memcpy(void* dst, void* src, int sz); +void* memcpy(void* dst, const void* src, int sz); +void* memset(void* dst, int data, int sz); +char* strcat(char* dst, const char* src); +int strlen(const char* src); +char* strcpy(char* dst, const char* src); #endif diff --git a/src/main.c b/src/main.c index 2e7c1a0..eaeae08 100644 --- a/src/main.c +++ b/src/main.c @@ -142,7 +142,7 @@ int main(int argc, char** argv){ ww = w * 4; wh = h * 4; - if((window = SDL_CreateWindow("68K SBC (LCD)", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, ww, wh, 0)) == NULL){ + if((window = SDL_CreateWindow("Micro68 (LCD)", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, ww, wh, 0)) == NULL){ fprintf(stderr, "SDL2 window creation failure\n"); st = 1;