| 1 | CROSS_DIR :=    /opt/cross-m68k/bin
 | 
|---|
| 2 | CROSS_TRI :=    m68k-none-elf
 | 
|---|
| 3 | CROSS_PRE :=    $(CROSS_DIR)/$(CROSS_TRI)
 | 
|---|
| 4 | 
 | 
|---|
| 5 | CROSS_GCC :=    $(CROSS_PRE)-gcc
 | 
|---|
| 6 | CROSS_AS :=             $(CROSS_PRE)-as
 | 
|---|
| 7 | CROSS_AR :=             $(CROSS_PRE)-ar
 | 
|---|
| 8 | CROSS_OBJC :=   $(CROSS_PRE)-objcopy
 | 
|---|
| 9 | 
 | 
|---|
| 10 | # -mshort sets the size of an int to 16 bits; important for interop with
 | 
|---|
| 11 | # the hand-written assembly language code
 | 
|---|
| 12 | 
 | 
|---|
| 13 | FLAGS :=                -Os -m68000 -Wall -Wextra
 | 
|---|
| 14 | 
 | 
|---|
| 15 | FLAGS_COM :=    $(FLAGS) -mshort -std=c99 -fleading-underscore -ffreestanding \
 | 
|---|
| 16 |                                 -nostdinc -fno-strict-aliasing -fno-inline -fno-omit-frame-pointer \
 | 
|---|
| 17 |                                 -Wpedantic -Wconversion -Wsign-conversion -Wshadow \
 | 
|---|
| 18 |                                 -Wstrict-prototypes -Wmissing-declarations -Wredundant-decls \
 | 
|---|
| 19 |                                 -I include
 | 
|---|
| 20 | 
 | 
|---|
| 21 | FLAGS_ASM :=    $(FLAGS) -Wa,--register-prefix-optional
 | 
|---|
| 22 | FLAGS_LNK :=    $(FLAGS) -mshort -std=c99 -ffreestanding -nostdlib
 | 
|---|
| 23 | 
 | 
|---|
| 24 | HEADERS :=              $(wildcard include/*.h)
 | 
|---|
| 25 | 
 | 
|---|
| 26 | all:                    bios.abs midas.abs
 | 
|---|
| 27 | 
 | 
|---|
| 28 | PROLOG_C :=             croot.c
 | 
|---|
| 29 | PROLOG_S :=             fsmain.s
 | 
|---|
| 30 | 
 | 
|---|
| 31 | PROLOG_CO :=    $(PROLOG_C:.c=.o)
 | 
|---|
| 32 | PROLOG_SO :=    $(PROLOG_S:.s=.o)
 | 
|---|
| 33 | PROLOG_OBJ :=   $(PROLOG_CO:%=build/%) $(PROLOG_SO:%=build/%)
 | 
|---|
| 34 | 
 | 
|---|
| 35 | build/%.o:              prolog/%.c $(HEADERS) | build
 | 
|---|
| 36 |                                 $(CROSS_GCC) $(FLAGS_COM) -c -o $@ $<
 | 
|---|
| 37 |                                 $(CROSS_OBJC) --redefine-syms misc/rewrite.txt $@
 | 
|---|
| 38 | 
 | 
|---|
| 39 | build/%.o:              prolog/%.s $(HEADERS) | build
 | 
|---|
| 40 |                                 $(CROSS_GCC) $(FLAGS_ASM) -c -o $@ $<
 | 
|---|
| 41 | 
 | 
|---|
| 42 | prolog.a:               $(PROLOG_OBJ)
 | 
|---|
| 43 |                                 rm -f prolog.a
 | 
|---|
| 44 |                                 $(CROSS_AR) rcs prolog.a $(PROLOG_OBJ)
 | 
|---|
| 45 | 
 | 
|---|
| 46 | LIBCIO_C :=             atoi.c atol.c blkrd.c blkwr.c close.c clusmap.c conin.c conwr.c \
 | 
|---|
| 47 |                                 dirfns.c fgets.c filesys.c filname.c flread.c fopen.c fprintf.c \
 | 
|---|
| 48 |                                 fputs.c fread.c fscanf.c fseek.c fsinit.c fsize.c fstubs.c ftell.c \
 | 
|---|
| 49 |                                 fwrite.c getbuff.c getc.c getl.c getw.c lseek.c open.c posit.c putc.c \
 | 
|---|
| 50 |                                 putl.c putw.c read.c readrn.c rename.c scan.c setbuf.c ungetc.c \
 | 
|---|
| 51 |                                 unlink.c write.c writern.c
 | 
|---|
| 52 | 
 | 
|---|
| 53 | LIBCIO_S :=             ptcl12.s
 | 
|---|
| 54 | 
 | 
|---|
| 55 | LIBCIO_CO :=    $(LIBCIO_C:.c=.o)
 | 
|---|
| 56 | LIBCIO_SO :=    $(LIBCIO_S:.s=.o)
 | 
|---|
| 57 | LIBCIO_OBJ :=   $(LIBCIO_CO:%=build/%) $(LIBCIO_SO:%=build/%)
 | 
|---|
| 58 | 
 | 
|---|
| 59 | build/%.o:              libcio/%.c $(HEADERS) | build
 | 
|---|
| 60 |                                 $(CROSS_GCC) $(FLAGS_COM) -c -o $@ $<
 | 
|---|
| 61 |                                 $(CROSS_OBJC) --redefine-syms misc/rewrite.txt $@
 | 
|---|
| 62 | 
 | 
|---|
| 63 | build/%.o:              libcio/%.s $(HEADERS) | build
 | 
|---|
| 64 |                                 $(CROSS_GCC) $(FLAGS_ASM) -c -o $@ $<
 | 
|---|
| 65 | 
 | 
|---|
| 66 | libcio.a:               $(LIBCIO_OBJ)
 | 
|---|
| 67 |                                 rm -f libcio.a
 | 
|---|
| 68 |                                 $(CROSS_AR) rcs libcio.a $(LIBCIO_OBJ)
 | 
|---|
| 69 | 
 | 
|---|
| 70 | VLIB_C :=               cg2.c cg3.c glcinit.c lseg.c vbfill4.c vclrs.c vhinit.c vmput.c \
 | 
|---|
| 71 |                                 vobjfns.c vputs.c vputsv.c vsetpal.c vsinit.c vspray4.c vtext.c \
 | 
|---|
| 72 |                                 vwputm.c
 | 
|---|
| 73 | 
 | 
|---|
| 74 | VLIB_S :=               acctrl.s glcplot.s tsplot4.s vbank.s vclrav.s vcputs.s vcputsv.s \
 | 
|---|
| 75 |                                 viint.s vputa.s vputc.s vputcv.s vputp.s vsetav.s vsetcv.s vsplot4.s \
 | 
|---|
| 76 |                                 vvputsv.s vwputp.s vwputs.s
 | 
|---|
| 77 | 
 | 
|---|
| 78 | VLIB_CO :=              $(VLIB_C:.c=.o)
 | 
|---|
| 79 | VLIB_SO :=              $(VLIB_S:.s=.o)
 | 
|---|
| 80 | VLIB_OBJ :=             $(VLIB_CO:%=build/%) $(VLIB_SO:%=build/%)
 | 
|---|
| 81 | 
 | 
|---|
| 82 | build/%.o:              vlib/%.c $(HEADERS) | build
 | 
|---|
| 83 |                                 $(CROSS_GCC) $(FLAGS_COM) -c -o $@ $<
 | 
|---|
| 84 |                                 $(CROSS_OBJC) --redefine-syms misc/rewrite.txt $@
 | 
|---|
| 85 | 
 | 
|---|
| 86 | build/%.o:              vlib/%.s $(HEADERS) | build
 | 
|---|
| 87 |                                 $(CROSS_GCC) $(FLAGS_ASM) -c -o $@ $<
 | 
|---|
| 88 | 
 | 
|---|
| 89 | vlib.a:                 $(VLIB_OBJ)
 | 
|---|
| 90 |                                 rm -f vlib.a
 | 
|---|
| 91 |                                 $(CROSS_AR) rcs vlib.a $(VLIB_OBJ)
 | 
|---|
| 92 | 
 | 
|---|
| 93 | IOLIB_C :=              dofmt.c mdump.c pause.c printf.c rawio.c sprintf.c waitcr.c
 | 
|---|
| 94 | IOLIB_S :=              hwdefs.s rtraps.s setipl.s setsr.s traps.s
 | 
|---|
| 95 | 
 | 
|---|
| 96 | IOLIB_CO :=             $(IOLIB_C:.c=.o)
 | 
|---|
| 97 | IOLIB_SO :=             $(IOLIB_S:.s=.o)
 | 
|---|
| 98 | IOLIB_OBJ :=    $(IOLIB_CO:%=build/%) $(IOLIB_SO:%=build/%)
 | 
|---|
| 99 | 
 | 
|---|
| 100 | build/%.o:              iolib/%.c $(HEADERS) | build
 | 
|---|
| 101 |                                 $(CROSS_GCC) $(FLAGS_COM) -c -o $@ $<
 | 
|---|
| 102 |                                 $(CROSS_OBJC) --redefine-syms misc/rewrite.txt $@
 | 
|---|
| 103 | 
 | 
|---|
| 104 | build/%.o:              iolib/%.s $(HEADERS) | build
 | 
|---|
| 105 |                                 $(CROSS_GCC) $(FLAGS_ASM) -c -o $@ $<
 | 
|---|
| 106 | 
 | 
|---|
| 107 | iolib.a:                $(IOLIB_OBJ)
 | 
|---|
| 108 |                                 rm -f iolib.a
 | 
|---|
| 109 |                                 $(CROSS_AR) rcs iolib.a $(IOLIB_OBJ)
 | 
|---|
| 110 | 
 | 
|---|
| 111 | LIBSM_C :=              index.c memccpy.c memchr.c memcmp.c memcmpu.c memcpy.c memcpyw.c \
 | 
|---|
| 112 |                                 memset.c memsetw.c rindex.c str2lc.c str2uc.c strcat.c strccpy.c \
 | 
|---|
| 113 |                                 strchr.c strcmp.c strcpy.c strcspn.c strfill.c strlcmp.c strlen.c \
 | 
|---|
| 114 |                                 strltrm.c strncat.c strncmp.c strncpy.c strpbrk.c strrchr.c strrev.c \
 | 
|---|
| 115 |                                 strrevi.c strrtrm.c strspn.c strtok.c strtol.c
 | 
|---|
| 116 | 
 | 
|---|
| 117 | LIBSM_CO :=             $(LIBSM_C:.c=.o)
 | 
|---|
| 118 | LIBSM_OBJ :=    $(LIBSM_CO:%=build/%)
 | 
|---|
| 119 | 
 | 
|---|
| 120 | build/%.o:              libsm/%.c $(HEADERS) | build
 | 
|---|
| 121 |                                 $(CROSS_GCC) $(FLAGS_COM) -c -o $@ $<
 | 
|---|
| 122 |                                 $(CROSS_OBJC) --redefine-syms misc/rewrite.txt $@
 | 
|---|
| 123 | 
 | 
|---|
| 124 | libsm.a:                $(LIBSM_OBJ)
 | 
|---|
| 125 |                                 rm -f libsm.a
 | 
|---|
| 126 |                                 $(CROSS_AR) rcs libsm.a $(LIBSM_OBJ)
 | 
|---|
| 127 | 
 | 
|---|
| 128 | LIB700_C :=             bitrev.c ctype.c ispow2.c mangle.c micons.c tolower.c toupper.c
 | 
|---|
| 129 | 
 | 
|---|
| 130 | LIB700_S :=             aldiv.s almul.s alrem.s blkfill.s blkmove.s finalone.s jumpto.s \
 | 
|---|
| 131 |                                 ldiv.s lmul.s lrem.s rand24.s setjmp.s uldiv.s
 | 
|---|
| 132 | 
 | 
|---|
| 133 | LIB700_CO :=    $(LIB700_C:.c=.o)
 | 
|---|
| 134 | LIB700_SO :=    $(LIB700_S:.s=.o)
 | 
|---|
| 135 | LIB700_OBJ :=   $(LIB700_CO:%=build/%) $(LIB700_SO:%=build/%)
 | 
|---|
| 136 | 
 | 
|---|
| 137 | build/%.o:              lib700/%.c $(HEADERS) | build
 | 
|---|
| 138 |                                 $(CROSS_GCC) $(FLAGS_COM) -c -o $@ $<
 | 
|---|
| 139 |                                 $(CROSS_OBJC) --redefine-syms misc/rewrite.txt $@
 | 
|---|
| 140 | 
 | 
|---|
| 141 | build/%.o:              lib700/%.s $(HEADERS) | build
 | 
|---|
| 142 |                                 $(CROSS_GCC) $(FLAGS_ASM) -c -o $@ $<
 | 
|---|
| 143 | 
 | 
|---|
| 144 | lib700.a:               $(LIB700_OBJ)
 | 
|---|
| 145 |                                 rm -f lib700.a
 | 
|---|
| 146 |                                 $(CROSS_AR) rcs lib700.a $(LIB700_OBJ)
 | 
|---|
| 147 | 
 | 
|---|
| 148 | ROM_C :=                booter.c romp.c
 | 
|---|
| 149 | ROM_S :=                bios.s timeint.s
 | 
|---|
| 150 | 
 | 
|---|
| 151 | ROM_CO :=               $(ROM_C:.c=.o)
 | 
|---|
| 152 | ROM_SO :=               $(ROM_S:.s=.o)
 | 
|---|
| 153 | # ROM_SO goes before ROM_CO, so that bios.o is first.
 | 
|---|
| 154 | ROM_OBJ :=              $(ROM_SO:%=build/%) $(ROM_CO:%=build/%)
 | 
|---|
| 155 | 
 | 
|---|
| 156 | LOWRAM_S :=             lowram.s
 | 
|---|
| 157 | 
 | 
|---|
| 158 | LOWRAM_SO :=    $(LOWRAM_S:.s=.o)
 | 
|---|
| 159 | LOWRAM_OBJ :=   $(LOWRAM_SO:%=build/%)
 | 
|---|
| 160 | 
 | 
|---|
| 161 | build/%.o:              rom/%.c $(HEADERS) | build
 | 
|---|
| 162 |                                 $(CROSS_GCC) $(FLAGS_COM) -c -o $@ $<
 | 
|---|
| 163 |                                 $(CROSS_OBJC) --redefine-syms misc/rewrite.txt $@
 | 
|---|
| 164 | 
 | 
|---|
| 165 | build/%.o:              rom/%.s $(HEADERS) | build
 | 
|---|
| 166 |                                 $(CROSS_GCC) $(FLAGS_ASM) -c -o $@ $<
 | 
|---|
| 167 | 
 | 
|---|
| 168 | bios.abs:               $(ROM_OBJ) \
 | 
|---|
| 169 |                                 prolog.a libcio.a vlib.a iolib.a libsm.a lib700.a
 | 
|---|
| 170 |                                 $(CROSS_GCC) $(FLAGS_LNK) -Wl,--script,misc/rom.ld,--entry,0x100000 \
 | 
|---|
| 171 |                                 -o bios.abs $(ROM_OBJ) \
 | 
|---|
| 172 |                                 prolog.a libcio.a vlib.a iolib.a libsm.a lib700.a -lgcc
 | 
|---|
| 173 | 
 | 
|---|
| 174 | RAM_C :=                addfpu.c adfield.c adselbx.c asgdsp.c asgvce.c barbadj.c chgsef.c \
 | 
|---|
| 175 |                                 chksec.c cminit.c ctcpos.c curset.c dbentr.c dcopy.c dec2fr.c delnote.c \
 | 
|---|
| 176 |                                 delpnts.c dformat.c dopatch.c enterit.c etaccn.c etadep.c etadyn.c \
 | 
|---|
| 177 |                                 etagch.c etagpt.c etains.c etaint.c etaopt.c etaprg.c etarat.c etatab.c \
 | 
|---|
| 178 |                                 etatun.c etavgr.c etdyn.c etiact.c eticnf.c etidin.c etimlt.c etinst.c \
 | 
|---|
| 179 |                                 etioas.c etiosc.c etipnt.c etires.c etitim.c etival.c etivce.c etiwsn.c \
 | 
|---|
| 180 |                                 etloc.c etmcfn.c etrel.c etres1.c etscor.c etsnbt.c etstrn.c ettpch.c \
 | 
|---|
| 181 |                                 ettrns.c etttab.c ettval.c etvel.c etwavs.c etwhar.c etwhrv.c etwoff.c \
 | 
|---|
| 182 |                                 etwpnt.c etwslt.c etwvce.c fcnote.c frfind.c gcurpos.c idfield.c idselbx.c \
 | 
|---|
| 183 |                                 im700.c infield.c initi.c instdsp.c itcpos.c kbobj.c lcdlbls.c ldfield.c \
 | 
|---|
| 184 |                                 ldselbx.c libdsp.c librw.c localkb.c m7menu.c midas.c msl.c msm.c nedacc.c \
 | 
|---|
| 185 |                                 pix2mid.c ptdisp.c ptdkey.c ptfield.c ptread.c ptselbx.c ptwrite.c puteq.c \
 | 
|---|
| 186 |                                 rscript.c scadv.c scfield.c scgoto.c scinit.c scope.c scordsp.c scread.c \
 | 
|---|
| 187 |                                 scselbx.c sctrak.c scwrite.c seccpy.c sedump.c select.c sendval.c setgc.c \
 | 
|---|
| 188 |                                 setv2gi.c setwq.c showcfg.c smscrl.c sqdisp.c sqdkey.c sqexec.c sqfield.c \
 | 
|---|
| 189 |                                 sqread.c sqscan.c sqselbx.c sqwrite.c stcpos.c stmproc.c swinit.c tdfield.c \
 | 
|---|
| 190 |                                 tdselbx.c ttcpos.c tundsp.c ucslice.c uslice.c vtyper.c wdfield.c wdselbx.c \
 | 
|---|
| 191 |                                 wheel.c wscalc.c wsdsp.c
 | 
|---|
| 192 | 
 | 
|---|
| 193 | RAM_S :=                execins.s execkey.s fpuint.s procpfl.s sedisp.s seexec.s serintr.s \
 | 
|---|
| 194 |                                 sreset.s timeint.s tofpu.s verdate.s
 | 
|---|
| 195 | 
 | 
|---|
| 196 | RAM_CO :=               $(RAM_C:.c=.o)
 | 
|---|
| 197 | RAM_SO :=               $(RAM_S:.s=.o)
 | 
|---|
| 198 | RAM_OBJ :=              $(RAM_CO:%=build/%) $(RAM_SO:%=build/%)
 | 
|---|
| 199 | 
 | 
|---|
| 200 | build/%.o:              ram/%.c $(HEADERS) | build
 | 
|---|
| 201 |                                 $(CROSS_GCC) $(FLAGS_COM) -c -o $@ $<
 | 
|---|
| 202 |                                 $(CROSS_OBJC) --redefine-syms misc/rewrite.txt $@
 | 
|---|
| 203 | 
 | 
|---|
| 204 | build/%.o:              ram/%.s $(HEADERS) | build
 | 
|---|
| 205 |                                 $(CROSS_GCC) $(FLAGS_ASM) -c -o $@ $<
 | 
|---|
| 206 | 
 | 
|---|
| 207 | midas.abs:              $(LOWRAM_OBJ) prolog.a $(RAM_OBJ) \
 | 
|---|
| 208 |                                 libcio.a vlib.a iolib.a libsm.a lib700.a
 | 
|---|
| 209 |                                 $(CROSS_GCC) $(FLAGS_LNK) -Wl,--script,misc/ram.ld,--entry,0x10000 \
 | 
|---|
| 210 |                                 -o midas.abs $(LOWRAM_OBJ) prolog.a $(RAM_OBJ) \
 | 
|---|
| 211 |                                 libcio.a vlib.a iolib.a libsm.a lib700.a -lgcc
 | 
|---|
| 212 | 
 | 
|---|
| 213 | build:
 | 
|---|
| 214 |                                 mkdir build
 | 
|---|
| 215 | 
 | 
|---|
| 216 | hatari/c.img:   $(wildcard hatari/c/bin/*) $(wildcard hatari/c/work/*)
 | 
|---|
| 217 |                                 rm -f hatari/c.img
 | 
|---|
| 218 |                                 atari-hd-image 16 hatari/c.img BUCHLA hatari/c
 | 
|---|
| 219 | 
 | 
|---|
| 220 | emu:                    hatari/c.img
 | 
|---|
| 221 |                                 hatari \
 | 
|---|
| 222 |                                 --control-socket /tmp/buchla.sock \
 | 
|---|
| 223 |                                 --memsize 14 \
 | 
|---|
| 224 |                                 --vdi-width 1280 --vdi-height 960 \
 | 
|---|
| 225 |                                 --drive-a false --drive-b false \
 | 
|---|
| 226 |                                 --acsi 0=hatari/c.img \
 | 
|---|
| 227 |                                 --harddrive hatari/d --gemdos-drive d
 | 
|---|
| 228 | 
 | 
|---|
| 229 | rem:
 | 
|---|
| 230 |                                 hatari/rem.py
 | 
|---|
| 231 | 
 | 
|---|
| 232 | virt:
 | 
|---|
| 233 |                                 python3 -m venv --without-pip virt
 | 
|---|
| 234 |                                 wget https://bootstrap.pypa.io/get-pip.py -O virt/get-pip.py
 | 
|---|
| 235 |                                 cd virt; . bin/activate; python3 get-pip.py; pip install pycparser
 | 
|---|
| 236 | 
 | 
|---|
| 237 | clean:
 | 
|---|
| 238 |                                 rm -rf build
 | 
|---|
| 239 |                                 rm -f prolog.a iolib.a libcio.a libsm.a lib700.a vlib.a
 | 
|---|
| 240 |                                 rm -f bios.abs midas.abs
 | 
|---|
| 241 |                                 rm -f hatari/c.img
 | 
|---|
| 242 |                                 rm -f hatari/d/out/*
 | 
|---|