Скомпилил из первого поста аласма алоне.
---------- Post added at 02:03 ---------- Previous post was at 02:02 ----------
Не знаю где писал, ты мне ничего про это не сказал. Что такое 17 переходов?
Вид для печати
Вертикальных? Горизонтальных? Любых?
ООоо. Тема-то разрастается. Хорошо. Давайте. Касательно денег, готов вложить тысяч 5 для начала. может кто ещё подсуетится.
А пока - перегнал исходники из аласма в текст. буду изучать эти макросы и условия, чтобы под кросс компилятор пилить. Пока только с макросами загвоздка. Надо подумать. Уделю этому больше времени и внимания.
Все не согласные с сабжем и в целом с темой, просьба не суетиться и не поднимать тут флуд! Всех пессимистов так же это касается.
Есть ещё один вариант - кинуть клич на кикстартер.
будешь переделывать сам?
тогда пара моментов
Алоне не уверен что можно адекватно перевести его макросы в формат кроссассемблеров.
у него макросы могут метки делать сложные.
Он предлагал развернуть макросы рейкаста и использовать уже их.
вариант с кикстартером - баловство.
Сам с удовольствием поучаствую в процессе - Kaiju таки висит мертвым грузом.
что за Kaiju ?
кроме сжасма есть ещё старый, древний М80 под цпм. там с макросами чуть получше и с условиями.
ещё есть тасм под мсдос...на крайняк.
игра которую я начал писать под этот движок
поверь мне таких макросов как в Аласм нет не было и наверное уже не будетЦитата:
кроме сжасма есть ещё старый, древний М80 под цпм. там с макросами чуть получше и с условиями.
ещё есть тасм под мсдос...на крайняк.
Код:MACRO <macro_name>
<body>
ENDM
Macro definition.
Inside macro:
\0..\9 - parameter 0,1,2,..9
\C - current symbol in parameters
\N - go to next symbol in parameters (returns nothing)
\S<char> - string from current symbol until <char> symbol
\P - shift parameter numeration. parameter 1 becomes 0 etc. Parameter 0
is returned.
\R - restores initial parameters enumeration as it was before \P.
<macro_name> [parameter1[,parameter...]]
Use macro.
Parameters are divided by commas (not counting commas in quotes).
MACRO DOWN
LOCAL
INC \C
LD A,\C
AND 7
JR NZ,LABEL
LD A,\N\C
SUB #E0
LD \C,A
SBC A,A
AND -8
ADD A,\R\C
LD \C,A
LABEL
ENDL
ENDM
This is generic DOWN HL or DOWN DE routine that counts screen address
будем разбираца с работой этих макросов. уверен, можно чем то другим заменить, не разворачивая его.Цитата:
поверь мне таких макросов как в Аласм нет не было и наверное уже не будет
пока я вижу, что есть макрос с аргументами как и везде, но с некоторыми параметрами (ключами). Вот с ними как раз и будет возня. думаю, можно решить.
---------- Post added at 12:47 ---------- Previous post was at 12:24 ----------
ну вот и первая конструкция, которую просто так не могу переварить
если бы делал под спринтер, я бы просто загрузчик написал.Код:ORG addr,page
...
ORG #C000,1
INCBIN "walls_bw"
INCBIN "goods_bw"
ORG #6000,0
хм, хотя тут и так должен быть загрузчик. одно дело на стадии отладки городить сборку и загрузку в страницы, другое когда проект уже на стадии продакшена и есть бейсик файл с кодовыми файлами. а бейсик сам по себе не знает что в какие страницы пихать. значит, в любом случае надо городить загрузчик. оставляю эту эпопею (загрузчики под трдос) для вас. для себя я делаю свой загрузчик под dss.
Sayman, не забывай что такое Аласм
это консоль+редактор+компилято р
на спеке нет возможности грузить чтото кудато.
в данном случае представь что ты собираешь снап с ракладкой по страницам.
jerri, когда будет не снап, а кодовый файл + загрущик на бейсике, то надо самому грузить уже по страницам. ты же не будет в трдос пихать снап, верно? будет бейсик+кодовый файл, но не снап или я что-то путаю уже?
опять таки, в трдосе есть возможность грузить файлы. включая нужную страницу и загружая на нужный адрес. раньше так и делали.
вот такого поверь мне не умеет никто
составлять метку из параметров макроса.
Код:;RAY 1,1,H,L,D,E,y,x
MACRO RAY
mainplus=\0 ;основное направление положительно
secplus=\1 ;побочное направление положительно
;\2=основное направление для hl
;\3=побочное направление для hl
;\4=основное направление для de
;\5=побочное направление для de
;\6=основное направление
;\7=побочное направление
;LD DE,(cur\7\6)
cur\0\1\7\6=$+1
LD DE,0
LD A,E ;основное направление
;IFN mainplus ;основное направление положительно
; CPL ;1-основное направление
; LD E,A
;ENDIF
LD LX,A ;IX=dist*cos
MULPOS
IFN secplus ;побочное направление положительно
ADD A,D ;побочное направление
LD B,A
;LD HL,(curYX)
ray\0\1\7\6_YX=$+1
LD HL,0
IFN "\6\6"-"xx"
;LD D,H,E,L
;SET mapdifbit,E
ray\0\1\7\6_YX2=$+1
LD DE,0
ELSE
LD D,H,E,L
ENDIF
JNC raynshort\0\1\7\6
INC \5 ;e/d
LD A,(DE)
RLA
JC raysec\0\1\7\6
INC \3 ;l/h
raynshort\0\1\7\6
IFN "\6\6"-"yy"
SET mapdifbit,L
ENDIF
ELSE
LD L,A
LD A,D ;побочное направление
SUB L
LD B,A
;LD HL,(curYX)
ray\0\1\7\6_YX=$+1
LD HL,0
IFN "\6\6"-"xx"
;LD D,H,E,L
;SET mapdifbit,E
ray\0\1\7\6_YX2=$+1
LD DE,0
ELSE
LD D,H,E,L
ENDIF
JNC raynshort\0\1\7\6
LD A,(DE)
RLA
JC raysec\0\1\7\6
DEC \3,\5 ;l/h,e/d
raynshort\0\1\7\6
IFN "\6\6"-"yy"
SET mapdifbit,L
ENDIF
ENDIF
raynsec\0\1\7\6
INC HX
IFN mainplus ;основное направление положительно
INC \2 ;h/l
ENDIF
LD A,(HL)
RLA
JP C,rayhlq ;b=texx
IFN mainplus ;основное направление положительно
INC \4 ;d/e
ELSE
DEC \2,\4 ;h/l,d/e
ENDIF
LD A,B
IFN secplus ;побочное направление положительно
ADD A,C
ELSE
SUB C
ENDIF
LD B,A
JNC raynsec\0\1\7\6
IFN secplus ;побочное направление положительно
INC \5 ;e/d
ENDIF
LD A,(DE)
RLA
JC raysec\0\1\7\6
IFN secplus ;побочное направление положительно
INC \3 ;l/h
ELSE ;побочное направление отрицательно
DEC \3,\5 ;l/h,e/d
ENDIF
JP raynsec\0\1\7\6
raysec\0\1\7\6
EXD
LD A,B
IFN secplus ;побочное направление положительно
SUB C
DIVPOS
ELSE
ADD A,C
DIVNEG
ENDIF
IFN mainplus ;основное направление положительно
CPL
LD B,A ;b=texx
ELSE
LD B,A ;b=texx
CPL
ENDIF
JP raydeq
ENDM
---------- Post added at 11:41 ---------- Previous post was at 11:38 ----------
сжасм умеет делать как снапы так и выгрузку блоков.
но для таких движков удобно подгружать как раз туда где все будет находится.
ну вот смотри:Цитата:
но для таких движков удобно подгружать как раз туда где все будет находится.
т.е. с адреса c000, в первую страницу. т.е. эти два файла нужно ручками загружать после компиляции. а на стадии отладки аласм сам кинет в нужную страницу. сжасм не кинет, значит нужно под трдос липить загрузку файлов...Код:ORG #C000,1
INCBIN "walls_bw"
INCBIN "goods_bw"
это видимо и есть та самая метка из параметра?Код:cur\0\1\7\6=$+1
---------- Post added at 14:14 ---------- Previous post was at 13:58 ----------
кароче, параметрические метки не страшны.
Не вопрос =) Загрузчик-то в любом случае писать нужно.
А trd легко собирается из того же SjAsm. Вот пример:
страницы здесь, разумеется, не выбираются: просто собираются файлы в trd.Код:ORG 24576
codebegin
INCBIN "..\block0.bin"
SAVETRD "final.trd","block0.C", codebegin,$-codebegin
ORG #C000
page_1
INCBIN "..\block1.bin"
SAVETRD "final.trd","block1.C", page_1,$-page_1
ORG #C000
page_2
INCBIN "..\block2.bin"
SAVETRD "final.trd","block2.C", page_2,$-page_2
......
ORG 16384
bootbegin
INCBIN "boot_trd.b" ; <---- наш бейсиковский загрузчик
SAVETRD "final.trd","boot.B", bootbegin,$-bootbegin
ну и в бейсиковском загрузчике меняем страницы, либо пишем загрузчик на asm - здесь уже варианты...
в общем, нет никаких проблем со сборкой финальных релизов из SjAsm; но это уже финальный шаг, а на этапе разработки удобно использовать компиляцию в снэп.
бейсиковский trd-loader лично я собираю через модифицированный (!) bas2tap (убрал обработку REM из оригинальной утилиты), но это уже другой вопрос... ах, да, еще обрезаю .tap до бейсиковского бинарника... (24 байта в начале и один в конце): в SjAsm, насколько мне известно, нельзя подключать .tap - файлы... оффтоп лютый уже, в общем =)
я собственно об этом и говорил а в снап как это всё заворачивать? и в доке нет такой директивы как page.Цитата:
страницы здесь, разумеется, не выбираются
...
в бейсиковском загрузчике меняем страницы, либо пишем загрузчик на asm
SjASMPlus Z80 v1.06 Stable - в мануале есть всё об использовании директивы PAGE. Как-то так:
а снэп будет сохраняться для всей памяти. как и для обычного 48К, просто в конце кода пишем SAVESNA "snap.sna",PROGRUNКод:PAGE 1
ORG #C000
..................
SAVEBIN "p1.bin",#C000,PAGE1END-#C000
PAGE1END
ну а "как написать .trd загрузчик" - это, наверное, отдельная тема =) Но из бейсика всё просто. Страницы в бейсике выбираются так: OUT 32765,<номер_страницы>
В доке есть директива PAGE, а также DEVICE. В снап заворачивать как в доке написано. Вообще при разработке никто не лепит загрузчиков для трдоса, все делают в снапах для отладки сразу в эмуляторе.
//upd Олег уже всё рассказал.
Вот что мне ответил AloneCoder
Привет, вот что я написал Sayman'у:
---
В цитадели, как мне кажется, рассчитываются координаты стен на экране, а между ними происходит натягивание текстуры линейно (там специфическое искажение). Мой метод из Wolf 2004 лучше не рассматривать вообще - он показал себя очень тормозным. Вот новый - другое дело, его можно использовать прямо готовыми процедурами. Там и точность достаточная, и особо быстрее и не сделаешь. На SjAsm его в читабельном виде написать невозможно из-за отсутствия параметрических меток - пришлось бы писать 8 раз практически один и тот же кусок кода (сканирование в разных направлениях) или пользоваться псевдометками типа 5f (и то не факт, что их хватит).
Исходник в аласме ещё одну проблему решает - там перед запуском собственно игры конвертируются текстуры из графического формата в координаты. Этот конвертор написан на ассемблере. К сожалению, ни одна известная мне связка кросс-тулзов не позволяет выполнить ассемблерную программу и использовать её результат в линковке. А аласм позволяет.
Wolf 2004 переписывать на современный движок очень не хочется, хочется сделать что-то новое на новом уровне, но нет художника и композитора соответствующего уровня (нужно не "текстуры", а игровой мир, и не "музоны", а саундтрек), хотя есть люди, которые готовы заплатить за игру реальные деньги.
А для оригинального Спектрума, для которого я писал новый движок, вообще отдельная проблема - в 48К помещается очень мало графики, так что надо придумать такой геймплей, чтобы можно было обойтись малым количеством. Но движок поддерживает и АТМ Турбо.
Никакой математический сопроцессор для такой игры не нужен - он не ускорит игру даже на 5%.
Абсолютно нерешабельная проблема. Подумать только, 8 раз одно и то-же писать... Все, сворачиваем тему...
ничего никуда не сворачиваем. разберёмся, какие там 8 раз и почему...
---------- Post added at 10:57 ---------- Previous post was at 09:24 ----------
вот кусок оригинального макроса:
начнём с того, что меткиКод:cur\\\\6=$+1
LD DE,0
LD A,E ;основное направление
;IFN mainplus ;основное направление положительно
; CPL ;1-основное направление
; LD E,A
;ENDIF
LD LX,A ;IX=dist*cos
MULPOS
IFN secplus ;побочное направление положительно
ADD A,D ;побочное направление
LD B,A
;LD HL,(curYX)
ray\\\\_YX=$+1
LD HL,0
IFN "\6\6"-"xx"
;LD D,H,E,L
;SET mapdifbit,E
ray\\\\_YX2=$+1
LD DE,0
ELSE
LD D,H,E,L
ENDIF
JNC raynshort\\\\6
INC \5 ;e/d
LD A,(DE)
RLA
JC raysec\\\\6
INC \3 ;l/h
raynshort\\\\6
IFN "\6\6"-"yy"
SET mapdifbit,L
ENDIF
ELSE
LD L,A
LD A,D ;побочное направление
SUB L
LD B,A
;LD HL,(curYX)
ray\\\\_YX=$+1
LD HL,0
IFN "\6\6"-"xx"
;LD D,H,E,L
;SET mapdifbit,E
ray\\\\_YX2=$+1
LD DE,0
ELSE
LD D,H,E,L
ENDIF
cur\\\\6=$+1
ray\\\\_YX=$+1
ray\\\\_YX2=$+1
и ещё несколько других в макросе не используются (по ним нет переходов). их можно закоментить. Условия компиляции IFN меняются на ifdef. Метки по которым есть переходы в макросе можно заменить на подобные конструкции:
было - JNC raynshort\\\\6
стало - jr nc, $+n, где n размер пропускаемого кода до нужного места.
В этом случае все метки просто комментятся или удаляются.
Остались под вопросом конструкции типа:
IFN "\6\6"-"yy" - пока не понял как это понимать вообще. точнее я понимаю, что "\6" это номер аргумента макроса. мне не ясна сама конструкция "\6\6"-"xx". Аргумент 6 - это координата "y". Я могу понять эту запись только как (y+y)-(x+x). Если результат положительный, тогда условие выполняется так, иначе (отрицательный результат или 0) будет выполняться так.
и конструкции типа INC \2 - это вообще не понял как работает.
ах да, ещё одни способ обойти эти чудесные макросы - сделать их обычными процедурами. передавать параметры или через стэк или регистры. как угодно. Да, немного тактов потеряем, зато много памяти выигрываем.
ты кстати зря сократил так имена меток
дело в том что упоминавшиеся Алоне параметрически метки выглядят весьма хитро.
то что тебе непонятны указанные пункты означает что ты вообще не понял как работают Макросы в АлАсме
попробую обьяснить.
вот оригинальный макрос
вот процедура рейкастаКод:;RAY 1,1,H,L,D,E,y,x
MACRO RAY
mainplus=\0 ;основное направление положительно
secplus=\1 ;побочное направление положительно
;\2=основное направление для hl
;\3=побочное направление для hl
;\4=основное направление для de
;\5=побочное направление для de
;\6=основное направление
;\7=побочное направление
;LD DE,(cur\7\6)
cur\0\1\7\6=$+1
LD DE,0
LD A,E ;основное направление
;IFN mainplus ;основное направление положительно
; CPL ;1-основное направление
; LD E,A
;ENDIF
LD LX,A ;IX=dist*cos
MULPOS
IFN secplus ;побочное направление положительно
ADD A,D ;побочное направление
LD B,A
;LD HL,(curYX)
ray\0\1\7\6_YX=$+1
LD HL,0
IFN "\6\6"-"xx"
;LD D,H,E,L
;SET mapdifbit,E
ray\0\1\7\6_YX2=$+1
LD DE,0
ELSE
LD D,H,E,L
ENDIF
JNC raynshort\0\1\7\6
INC \5 ;e/d
LD A,(DE)
RLA
JC raysec\0\1\7\6
INC \3 ;l/h
raynshort\0\1\7\6
IFN "\6\6"-"yy"
SET mapdifbit,L
ENDIF
ELSE
LD L,A
LD A,D ;побочное направление
SUB L
LD B,A
;LD HL,(curYX)
ray\0\1\7\6_YX=$+1
LD HL,0
IFN "\6\6"-"xx"
;LD D,H,E,L
;SET mapdifbit,E
ray\0\1\7\6_YX2=$+1
LD DE,0
ELSE
LD D,H,E,L
ENDIF
JNC raynshort\0\1\7\6
LD A,(DE)
RLA
JC raysec\0\1\7\6
DEC \3,\5 ;l/h,e/d
raynshort\0\1\7\6
IFN "\6\6"-"yy"
SET mapdifbit,L
ENDIF
ENDIF
raynsec\0\1\7\6
INC HX
IFN mainplus ;основное направление положительно
INC \2 ;h/l
ENDIF
LD A,(HL)
RLA
JP C,rayhlq ;b=texx
IFN mainplus ;основное направление положительно
INC \4 ;d/e
ELSE
DEC \2,\4 ;h/l,d/e
ENDIF
LD A,B
IFN secplus ;побочное направление положительно
ADD A,C
ELSE
SUB C
ENDIF
LD B,A
JNC raynsec\0\1\7\6
IFN secplus ;побочное направление положительно
INC \5 ;e/d
ENDIF
LD A,(DE)
RLA
JC raysec\0\1\7\6
IFN secplus ;побочное направление положительно
INC \3 ;l/h
ELSE ;побочное направление отрицательно
DEC \3,\5 ;l/h,e/d
ENDIF
JP raynsec\0\1\7\6
raysec\0\1\7\6
EXD
LD A,B
IFN secplus ;побочное направление положительно
SUB C
DIVPOS
ELSE
ADD A,C
DIVNEG
ENDIF
IFN mainplus ;основное направление положительно
CPL
LD B,A ;b=texx
ELSE
LD B,A ;b=texx
CPL
ENDIF
JP raydeq
ENDM
а если учесть наличие ссылок на эти места из других мест программы и отказ работы в сжасм связок вида.Код:;mainplus=\0 ;основное направление положительно
;secplus=\1 ;побочное направление положительно
;\2=основное направление для hl
;\3=побочное направление для hl
;\4=основное направление для de
;\5=побочное направление для de
;\6=основное направление
;\7=побочное направление
ray1
BIT 7,L
JP NZ,ray1b
RAY 1,1,L,H,E,D,x,y ;1a
ray1b
RAY 1,1,H,L,D,E,y,x ;1b
ray2
BIT 7,L
JP NZ,ray2b
RAY 1,0,H,L,D,E,y,x ;2a
ray2b
RAY 0,1,L,H,E,D,x,y ;2b
ray3
BIT 7,L
JP NZ,ray3b
RAY 0,0,L,H,E,D,x,y ;3a
ray3b
RAY 0,0,H,L,D,E,y,x ;3b
ray4
BIT 7,L
JP NZ,ray4b
RAY 0,1,H,L,D,E,y,x ;4a
ray4b
RAY 1,0,L,H,E,D,x,y ;4b
rayhlq
XOR A
raydeq
;теперь раскрываем один из макросов
вот этот
RAY 1,1,L,H,E,D,x,y ;1a
{
;RAY 1,1,H,L,D,E,y,x
MACRO RAY
mainplus=1 \0 ;основное направление положительно
secplus=1 \1 ;побочное направление положительно
;L \2=основное направление для hl
;H \3=побочное направление для hl
;E \4=основное направление для de
;D \5=побочное направление для de
;x \6=основное направление
;y \7=побочное направление
;LD DE,(curyx)
cur11yx=$+1
LD DE,0
LD A,E ;основное направление
;IFN mainplus ;основное направление положительно
; CPL ;1-основное направление
; LD E,A
;ENDIF
LD LX,A ;IX=dist*cos
MULPOS
IFN secplus ;побочное направление положительно
ADD A,D ;побочное направление
LD B,A
;LD HL,(curYX)
ray11yx_YX=$+1
LD HL,0
IFN "xx"-"xx"
;LD D,H,E,L
;SET mapdifbit,E
ray11yx_YX2=$+1
LD DE,0
ELSE
LD D,H,E,L
ENDIF
JNC raynshort11yx
INC D ;e/d
LD A,(DE)
RLA
JC raysec11yx
INC H ;l/h
raynshort11yx
IFN "xx"-"yy"
SET mapdifbit,L
ENDIF
ELSE
LD L,A
LD A,D ;побочное направление
SUB L
LD B,A
;LD HL,(curYX)
ray11yx_YX=$+1
LD HL,0
IFN "xx"-"xx"
;LD D,H,E,L
;SET mapdifbit,E
ray11yx_YX2=$+1
LD DE,0
ELSE
LD D,H,E,L
ENDIF
JNC raynshort11yx
LD A,(DE)
RLA
JC raysec11yx
DEC h,d ;l/h,e/d
raynshort11yx
IFN "xx"-"yy"
SET mapdifbit,L
ENDIF
ENDIF
raynsec11yx
INC HX
IFN mainplus ;основное направление положительно
INC l ;h/l
ENDIF
LD A,(HL)
RLA
JP C,rayhlq ;b=texx
IFN mainplus ;основное направление положительно
INC E ;d/e
ELSE
DEC L,E ;h/l,d/e
ENDIF
LD A,B
IFN secplus ;побочное направление положительно
ADD A,C
ELSE
SUB C
ENDIF
LD B,A
JNC raynsec11yx
IFN secplus ;побочное направление положительно
INC D ;e/d
ENDIF
LD A,(DE)
RLA
JC raysec11yx
IFN secplus ;побочное направление положительно
INC H ;l/h
ELSE ;побочное направление отрицательно
DEC H,D ;l/h,e/d
ENDIF
JP raynsec11yx
raysec11yx
EXD
LD A,B
IFN secplus ;побочное направление положительно
SUB C
DIVPOS
ELSE
ADD A,C
DIVNEG
ENDIF
IFN mainplus ;основное направление положительно
CPL
LD B,A ;b=texx
ELSE
LD B,A ;b=texx
CPL
ENDIF
JP raydeq
ENDM
}
dup
if
endif
edup
то да - беда может быть
перепишите алласм под виндовс, это проще будет чем с движком разбираться. почему алоне решил что математический процессор ничего не ускорит? в коде игры нет деления, умножения, вычитания и сложения? аппаратные тригонометрические функции позволят вообще другой движок самим неплохо написать, чем связываться с особо хитрым и непонятным движком, у которого ещё и с текстурами серьёзные проблеммы похоже будут вылазить.
GS может выступать в роли математического сопроцессора?
лучше доработать сжасм. исходники есть.Цитата:
перепишите алласм под виндовс
при этом, сжасм из аргументов макроса вытягивает в метку содержимое параметров...вроде...но всё ровно ошибки прут.
ну если ко всем подключается. то это неплохо. только по фоткам я просто цветные кубики увидел и всё. во вторых, зачем в этой платке ещё один z80 нарисовался? вроде же плата для графики?
Для разбора настоятельно рекомендую написать автомат, который будет собирать модифицированный тобой исходник, сравнивать побайтно с результатами сборки алоновского исходника и вразумительно показывать разницу. Это сэкономит 100500 времени на отладку.
Сжасм не умеет динамические метки и много чего еще. Он прост как валенок. Проще переписать его с нуля тогда. Но есть один нюанс: это не поможет. Менять движок и делать на его основе игру можно только после полного просветления. А, когда наступит просветление, движок можно легко переписать и на ужасм.
Нет. Во-первых, в GS тот же Z80, только побыстрее, он будет считать по тем же алгоритмам, что и ЦП, а ЦП будет его ждать. А еще в GS нельзя загрузить число каким-нибудь OTIR, поэтому циклы обмена с ним будут с лихвой компенсировать разницу в скорости расчета.
[offtop]Вообще, сопроцессор в идеале должен сам уметь брать данные из памяти ЦП и возвращать в нее результат. А лучше сразу и данные, и команды. Как чуть более медленный вариант - уметь INIR/OTIR для обмена данными. [/offtop]
В GS можно засунуть не просто примитивную математику, а целиковые алгоритмы, которые можно просчитывать параллельно с отрисовкой. При условии, что эти алгоритмы возвращают единицы байт, а не экран целиком.
к сожалению это невозможно, пока конструкцию класического z80 не изменить.
---------- Post added at 18:21 ---------- Previous post was at 18:19 ----------
я думаю это очень и очень геморно, поэтому до сих пор кроме самого алона ничего такого с GS так и не сделал.
Обратите внимание на тот же алониевский движок от Вольфа, но под 16 цветов АТМТурбо в демке The Board 2.
чем сложно? выделяется буфер памяти, в адресном пространстве Z80. в неё согласно параметрам сопроцессора, забиваются комманды и данные. на следущем цикле от ту да же, или из другого буфера памяти, получаем уже результат. никаких доп примочек городить не надо.
возможно. я ведь знаю очень поверхностно. но как то например Weitek 4167 это делал, когда шины i486 уже внутренним 87 сопроцессором были захвачены. может быть по спектрумовской традиции на какой то порт это чтение-запись повесить? BASIC как ненапрашивается, вообще трогать нельзя. все старые программы могут отвалиться разом.
BASIC трогать можно и нужно - для любителей поиграться в старые BASIC-игры, которые, возможно, станут заметно шустрее. Желательно только модифицированный BASIC шить в альтернативное ПЗУ какое-то. Или поставить хук на rst #28, и подменять ПЗУ только для расчетов. А реализация с INIR/OTIR мне видится довольно простой.
PS Заказал ужо модераторам раздела переезд разговоров про сопроцессор в специально придуманную для этого тему.