copy to ram and initialze sprite from c
authorRobin Krens <robin@robinkrens.nl>
Mon, 6 Jun 2022 11:56:54 +0000 (13:56 +0200)
committerRobin Krens <robin@robinkrens.nl>
Mon, 6 Jun 2022 11:56:54 +0000 (13:56 +0200)
Makefile
src/init.s
src/main.c

index 9403cf9..de9a494 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -3,20 +3,28 @@ INC=./inc
 CC=bcc
 LD=ld86
 AS=nasm
+MED=mednafen
 
 #$(LD) -M src/*.o
 
 # -d delete headers
 # -s strip symbols
 all:
-       $(LD) src/*.o -d -s -o test.wsc
+       $(LD) -T0x0 -D0xF000 src/*.o -d -s -o test.wsc
 
 # use -x to for -ffreestanding
 c-files:
-       $(CC) -O -c src/*.c -I$(INC)
+       $(CC) -0 -c src/*.c -I$(INC)
 init:
        $(AS) -fas86 src/*.s -i $(INC)
 
+add:
+       cp test.wsc tools/
+       cd tools && ./romheader
+
+run:
+       $(MED) tools/test.wsc
+
 clean:
        rm -rf src/*.o test.wsc
 
index 3a36e09..004c231 100644 (file)
@@ -2,7 +2,10 @@
 %include "WonderSwan.inc"
 
 extern _main
-extern __end
+extern         _test_copy
+extern         __etext
+extern         __edata
+extern         __end
 
 MYSEGMENT      equ     0xF000
 
@@ -33,7 +36,7 @@ sprtable      equ     bgmap-SPR_TABLE_SIZE
        mov     di,ax
        mov     ds,ax           ; Clear Segments
        mov     es,ax
-
+       
        mov     bp,ax           ; Setup stack
        mov     ss,ax
        mov     sp,WS_STACK
@@ -44,7 +47,7 @@ sprtable      equ     bgmap-SPR_TABLE_SIZE
 
        mov     sp,WSC_STACK    ; New stack
        
-       call    _main
+       ;call   _main
 
        xor     ax,ax           ; Clear Ram
        mov     di,0x100
@@ -53,6 +56,9 @@ sprtable      equ     bgmap-SPR_TABLE_SIZE
 
        out     IO_SRAM_BANK,al
 
+
+       ;mov    cx, 0x100
+
        ; Video Init
        in      al,IO_VIDEO_MODE
        or      al,VMODE_16C_CHK | VMODE_CLEANINIT
@@ -106,11 +112,15 @@ sprtable  equ     bgmap-SPR_TABLE_SIZE
 ;--------------------------------
 
        ; Set Segments for Copy
-       mov     ax,MYSEGMENT
+       mov     ax,0xF000
        mov     ds,ax
        xor     ax,ax
        mov     es,ax
 
+       mov     si, 0xF000
+       mov     di, 0x1000
+       mov     cx, 50
+       rep     movsb
        ; Make BG
 
        mov     si,TileGfx
@@ -118,10 +128,16 @@ sprtable  equ     bgmap-SPR_TABLE_SIZE
        mov     cx,(TileGfxE-TileGfx)/2
        rep     movsw
 
-       mov     si,TilePal
-       mov     di,WSC_PALETTES
-       mov     cx,16
-       rep     movsw
+       ;mov    si,TilePal
+       ;mov    di,WSC_PALETTES
+       ;mov    cx,32
+       ;rep    movsb
+;back:
+       call    _main
+       ;call   _main
+       ;call   _test_copy
+       ;call   _test_copy
+       ;jmp    back
 
        mov     ax,BG_CHR(0,0,0,0,0)    ; Initial Tile, Pal 0, Bank 0
        mov     di,bgmap
@@ -132,6 +148,9 @@ sprtable    equ     bgmap-SPR_TABLE_SIZE
        mov     al,BG_ON | FG_ON
        out     IO_DISPLAY_CTRL,al
 
+blaat:
+       jmp     blaat
+
        ; Loop Read Buttons
 loop:
        mov     al,KEYPAD_READ_BUTTONS
index 375b587..3763f3c 100644 (file)
@@ -13,14 +13,89 @@ void outport(c)
 #endasm
 }
 
-int main()
+static unsigned char data[] = {
+0x65, 0x06, 0x67, 0x06, 0x79, 0x07, 0x8c, 0x08, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f,
+0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f
+};
+
+static unsigned char data2[] = {
+0x65, 0x06, 0x67, 0x06, 0x79, 0x07, 0x8c, 0x08, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f,
+0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f
+};
+
+static unsigned char data3[] = {
+0x65, 0x06, 0x67, 0x06, 0x79, 0x07, 0x8c, 0x08, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f,
+0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f
+};
+       
+
+
+unsigned short *memcpy(dest, src, cnt)
+       unsigned short *dest;
+       unsigned short *src;
+       int cnt;
 {
-       while(1) {
-               /* outport(0x15EE); */
-               unsigned reg = 0x15;
-               unsigned val = 0xEE;
-               outport((reg << 8) | val);
 
+       int i;
+#asm
+       ;push ds
+       ;push es
+       mov ax, 0x0
+       mov ds, ax
+       xor ax, ax
+       mov es, ax
+#endasm
+       for (i = 0; i < cnt; ++i) {
+               *dest++ = *src++;
+               //*dest++ = 0x66;
        }
+#asm   
+       ;pop es
+       ;pop ds
+       mov ds, 0xF000
+#endasm
+       return dest;
+}
+
+void test_copy()
+{
+#asm 
+       ;mov ds, 0
+#endasm
+      
+//     unsigned short dest = 0xFE00;
+//     unsigned * ptr = dest;
+//     *ptr++ = 0xDEAD;
+//     *ptr++ = 0xAAAA;
+//     *ptr++ = 0xDEAD;
+       memcpy(0xFE00, 0x1000, 16);
+#asm 
+       ;mov ds, 0xF000
+#endasm
+       //wmemcpy(WSC_PALETTES, 0x2F000, 32);
+       return;
+}
+
+int main()
+{
+       unsigned short data_seg = 0xF000;
+       unsigned short data_ram = 0x1000;
+       unsigned short rel_ram = data_seg - data_ram;
+
+       /* dummy */
+       memcpy(0x0, 0x0, 0);
+
+       memcpy(0xFE00, data - rel_ram, 16);
+       //memcpy(0xFE00, data_seg + data, 16);
+       
+       //while(1) {
+       //      /* outport(0x15EE); */
+       //      unsigned reg = 0x15;
+       //      unsigned val = 0xEE;
+       //      outport((reg << 8) | val);
+
+       //}
+
+
        return 0;
 }