hello,
currently I play around with some code in C and Asm using the vbcc/vlink/vasm family. To make it more interesting I am using the small code and small data model. Using the docs and some disassembling with IRA I came along quite quickly.
Originally I defined local variables in Assembler and C parts. Then I came aware that the startup code is only clearing the BSS content of vars from the C part so I 'moved' over all variables from the Assembler part to (global) C and XREF'ing them, no problem.
Now I see that all variables get 'extended' to DS.L regardless of their original size. Of course this doesn't make a difference for the size of the executable but still I wonder did I make something wrong here?
Code:
#include "amigasupp_c.h"
struct DosLibrary *DOSBase;
struct GfxBase *GfxBase;
struct IntuitionBase *IntBase;
struct Task *ThisTask;
struct CopList *OldCopList;
struct View *OldView;
APTR WBScreen;
ULONG OldRes;
UWORD OldIntenar;
UWORD OldIntreqr;
UWORD OldDmaconr;
UWORD HasVBR;
UWORD KickVersion;
[...]
the Makefile
Code:
NAME = hwtest
VBCC = /opt/vbcc
TARGET = kick13m
CC = $(VBCC)/bin/vc
LD = $(VBCC)/bin/vc
AS = $(VBCC)/bin/vasmm68k_mot
INCDIR = /opt/NDK_3.9/Include/include_h
CFLAGS = +$(TARGET) -g -sc -sd -c99 -I$(INCDIR)
LDFLAGS = +$(TARGET) -g -sc -sd -lamiga
ASFLAGS =-I/opt/NDK_3.9/Include/include_i -quiet -m68000 -Fhunk -linedebug
OBJDIR = build/
EXE = $(NAME).exe
C_SOURCES = $(wildcard *.c)
C_OBJ = $(addprefix $(OBJDIR), $(C_SOURCES:.c=.o))
S_SOURCES = $(wildcard *.s)
S_OBJ = $(addprefix $(OBJDIR), $(S_SOURCES:.s=.o))
OBJ = $(C_OBJ) $(S_OBJ)
all: $(EXE)
$(EXE) : $(OBJ)
$(LD) $(LDFLAGS) -o $(EXE) $^
$(OBJDIR)%.o : %.c
mkdir -p $(OBJDIR)
$(CC) $(CFLAGS) -o "$@" -c $<
$(OBJDIR)%.o : %.s
mkdir -p $(OBJDIR)
$(AS) $(ASFLAGS) -o "$@" $<
.PHONY: transfer clean dis emu
emu:
fs-uae /home/apollo/src/amiga/base/dev13.fs-uae
transfer:
scp $(EXE) apollo@samba.home.lan:/media/usb/ironwolf_4tb/dev/amiga/hd0/
dis:
ira -BASEREG=4 -PREPROC $(EXE) $(OBJDIR)$(NAME).asm
clean:
$(RM) -r $(OBJDIR)
output from IRA v2.09
Code:
[...]
SECTION S_2,BSS
__BSSBAS:
DS.L 1
_SysBase:
DS.L 1
_DOSBase:
DS.L 1
_GfxBase:
DS.L 1
_IntBase:
DS.L 1
_ThisTask:
DS.L 1
_OldCopList:
DS.L 1
_OldView:
DS.L 1
_WBScreen:
DS.L 1
_OldRes:
DS.L 1
_OldIntenar:
DS.L 1
_OldIntreqr:
DS.L 1
_OldDmaconr:
DS.L 1
_HasVBR:
DS.L 1
_KickVersion:
DS.L 1
END
vbcc V0.9g
vlink V0.16d
vasm 1.8h