В Unreal Spectrum этот trd не грузится.
В Unreal Spectrum этот trd не грузится.
Oleg N. Cher, адрес на экране из hl принципиально забирать?
---------- Post added at 22:57 ---------- Previous post was at 22:55 ----------
в ix обработка ошибок?PUSH IX
LD IX,#0
ADD IX,SP
#endif
LD A,#0x1E
CP A,4(IX) ; x
RET C ; IF x <= 30 THEN RETURN
LD C,5(IX) ; y
CP A,C
RET C ; IF y
---------- Post added at 23:04 ---------- Previous post was at 22:57 ----------
я бы перепахал таблицу
ускорил бы на 48 тактовld a,(ix+4)
add a,(hl)
ld c,a
inc l
ld b,(hl)
inc hl
ld a,(de)
ld (bc),a
inc de
inc c
ld a,(de)
ld (bc),a
inc de
С уважением,
Jerri / Red Triangle.
А я проверил в Spectaculator 6, и тоже не грузится. В принципе, trd-шник создан старой ещё досовской утилитой Медноногова bin2trd, от которой я давно хочу избавиться. Однако сгенеренные ею trd-шки открываются в, начиная со старинного же Шалаева и заканчивая FUSE и EmuZWin. Исходников bin2trd у меня нет, и с форматом я не знаком. Надо разбираться.
Зато данный казус простимулировал работу над моей собственной утилитой MakeZX. Планирую скоро зарелизить первую версию. Вероятно, поддержки формата TRD в версии 1.0 не будет, а может и вообще не будет. Разве что мне поможет кто-то более опытный, ведь утилита будет полезна не только для ZXDev, но и для SDCC (а может и ещё применения найдутся).
Интерфейс для работы с TRD будет выглядеть, скорее всего, так:Работа с диском будет осуществляться так (с лентой аналогично):Код:DEFINITION DiskTRD; TYPE DiskFile = RECORD (* OBJECT *) error-: BOOLEAN; (* Is error after ReCreate, SaveBasic, SaveCode or Finalize? *) END; PROCEDURE (VAR trd: DiskFile) ReCreate (diskName: STRING); PROCEDURE (VAR trd: DiskFile) SaveBasic ( name: STRING; startLine, dataLength: INTEGER; VAR data: ARRAY OF BYTE); PROCEDURE (VAR trd: DiskFile) SaveCode ( name: STRING; startAddr, dataLength: INTEGER; VAR data: ARRAY OF BYTE); PROCEDURE (VAR trd: DiskFile) Finalize; END DiskTRD.
Конечно же непринципиально, можно забирать из любой пары.Код:PROCEDURE CreateTrdDisk; VAR trd: DiskTRD.DiskFile; data: ARRAY 2 OF BYTE; BEGIN data[0] := CHR(243); data[1] := CHR(175); (* First 2 bytes of ROM. *) trd.ReCreate("mydisk.trd"); trd.SaveCode("ROM", 0, 2, data); trd.Finalize; IF trd.error THEN IO.WriteStr("Disk creating error") END; END CreateTrdDisk;
Не совсем. IX в начале процедуры мы настраиваем чтобы таскать параметры из стека, которые были положены туда примерно так:Но мы проверяем не вышли ли координаты за пределы экрана. В конце работы над игрой эти проверки, если понадобится, можно убрать.Код:LD HL, tileAddr PUSH HL LD HL, tileCoords PUSH HL CALL _GrTiles_PutTile
jerri, интересная мысль! Благодарю.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)