DimkaM wrote:И как ему сказать что компилю в ОЗУ, а не в ПЗУ, а то он шаманит чёйта с переменными.
Скрипт для линкера написать, и сегменты все объявлять как RSEG (релоцируемые), а конкретные адреса задавать в линк скрипте. ORG - не использовать вообще.
Линк скрипты типа такого:
- Code: Select all
//-Fraw-binary
-Fintel-extended
-cZ80
-l my.map
-o test.hex
//-HFF
-xemisn
-w29=i // disable "initialized data warning"
-z
-Y0
-D?BANK_SWITCH_PORT_X_L08=7FFD
-b(CODE)CODE=C000,4000,10000,6
-Z(CODE)RCODE,CDATA0,CONST,CSTR,CCSTR,FARCODE=8000-BFFF
-Z(DATA)BNKTBL|8=8000-BFFF
-Z(DATA)DATA0,IDATA0,UDATA0,ECSTR,WCSTR,NEAR_I=8000-BFFF
-Z(DATA)NEAR_Z,NEAR_ID,INITTAB,TEMP=8000-BFFF
Ну и естественно надо свой стартап код написать на асме.
Батник для сборки выглядит примерно так:
- Code: Select all
@echo off
"%IAR%\az80.exe" l08.a80
"%IAR%\az80.exe" -Dbanking=1 start.a80 -l start.lst
"%IAR%\az80.exe" putc.a80
"%IAR%\iccz80.exe" -mb -uu -q -P -K -I"%IAR%/../inc/" main.c -l main.lst
"%IAR%\iccz80.exe" -mb -uu -q -P -K -I"%IAR%/../inc/" unifft.c -l unifft.lst
"%IAR%\iccz80.exe" -mb -uu -q -P -K -I"%IAR%/../inc/" idct.c -l idct.lst
"%IAR%\iccz80.exe" -mb -uu -q -P -K -I"%IAR%/../inc/" md5.c -l md5.lst
"%IAR%\iccz80.exe" -mb -uu -q -P -K -I"%IAR%/../inc/" sha1.c -l sha1.lst
"%IAR%\iccz80.exe" -mb -uu -q -P -K -I"%IAR%/../inc/" aes.c -l aes.lst
"%IAR%\iccz80.exe" -mb -uu -q -P -K -I"%IAR%/../inc/" rc4.c -l rc4.lst
"%IAR%\xlink.exe" -f my.xcl start.r01 main.r01 md5.r01 unifft.r01 idct.r01 ^
sha1.r01 aes.r01 rc4.r01 putc.r01 l08.r01 clz80b.r01
objcopy -I ihex -O binary -j.sec1 test.hex test_code.bin
objcopy -I ihex -O binary -j.sec2 test.hex test_data.bin
setlocal enabledelayedexpansion
for /L %%i in (0,1,5) do (
SET /a SEC_NO=%%i + 3
objcopy -I ihex -O binary -j.sec!SEC_NO! test.hex test_bank%%i.bin
)
setlocal disabledelayedexpansion
for /L %%i in (0,1,5) do (
for %%j in (test_bank%%i.bin) do (
SET BANK%%i_SIZE=%%~zj
)
)
"%IAR%\az80.exe" -DBANK0_SIZE=%BANK0_SIZE% ^
-DBANK1_SIZE=%BANK1_SIZE% -DBANK2_SIZE=%BANK2_SIZE% ^
-DBANK3_SIZE=%BANK3_SIZE% -DBANK4_SIZE=%BANK4_SIZE% ^
-DBANK5_SIZE=%BANK5_SIZE% ldr.a80 -l ldr.lst
"%IAR%\xlink.exe" -f ldr.xcl ldr.r01
"%IAR%\xlink.exe" -f prg.xcl
for %%i in (ldr.bin) do SET LDR_SIZE=%%~zi
"%IAR%\az80.exe" -DLDR_SIZE=%LDR_SIZE% scl.a80
"%IAR%\xlink.exe" -f scl.xcl scl.r01
На выходе получается готовый scl файл для эмулятора.