PC-01 Lviv

It is currently 28 Mar 2024, 11:34

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00




Post new topic  Reply to topic  [ 105 posts ]  Go to page 1 2 3 4 57 Next
Author Message
PostPosted: 28 May 2021, 08:55 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Zorko, выставил на испанский конкурс игр для Спектрума 16К
http://www.bytemaniacos.com/?page_id=3826
маленькую болдердаш-подобную игру, об этом он написал здесь:
viewtopic.php?p=5462#p5460
И предлагает портировать её на ПК-01 Львов.

ImageImage
ImageImage
ImageImage

Я ему предложил по этому поводу создать отдельную тему
"Портировать Boulder Dash на ПК-01 Львов"
так как правильнее было бы создать такую тему именно автору!
Но он что-то застеснялся :-) и поэтому тему создал я ! :-)

Из первого сообщения от Zorko по теме портирования
viewtopic.php?p=5462#p5460
сделаю некоторые вырезки сюда в тему

Исходники игры на асме, здесь:
http://www.bytemaniacos.com/ficheros/co ... bolder.zip

Видеопрохождение здесь:
https://www.youtube.com/watch?v=K14PBx84uuU

Эмулятор Спектрума EmuZWin_2.7.zip [1.07 МБ] здесь:
download/file.php?id=380


Top
   
PostPosted: 28 May 2021, 09:33 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Цитаты из сообщения
viewtopic.php?f=8&t=391&p=5464#p5462
Quote:
Трудности: экран 16x16 тайлов. Видимо, из-за ограничений видеоподсистемы Львова нельзя брать полное разрешение 256x256 (тайл 16x16 точек). Поэтому придётся уменьшить размер тайла. И это надо сделать грамотно, чтобы по возможности не пострадала скорость вывода.
ну тогда придётся брать 8х8 если есть уверенность что быстродействия не хватит для 16х16!

У меня сейчас к сожалению МАДЛ "раздолбан", когда я его соберу до кучи не знаю,
но попытаюсь подкинуть какие-то полезности.
процедура вывода тайла на экран есть ?
Quote:
Когда сразу много всего происходит, то и Спектрум проседает. Самая времяёмкая операция - вывод тайла. Не считая вывода звука через бипер (тоже такты жрёт), но терпимо.
Ну звук для начала я бы вообще "отфутболил бы"....
Такой звук как на ПК-01 и Спектруме, можна и "отфутболить" :-)
это ж не АТАРИ!
Quote:
Но мне хочется заморочиться и сделать лабиринты без скроллинга.
Вот эта фраза мне не очень-то понятна.
Quote:
Насчёт темы не знаю... но если соберёмся делать, тогда конечно надо.
Сейчас не соберёмся - потом соберёмся...
Я и ты не соберемся - кто-то другой соберётся.
Ты исходники то на Обероне не собираешься выложить ?... чтобы возможный соблазн возник у кого-то.

По ходу Boulder Dash который уже есть для ПК-01
http://pc01.lviv.ua/games/page.php?name=boulderdash
ты уже видел ?
Это не про этот ли скролинг ты говоришь ?... т.е чтобы весь уровень в экран не вмещался ?
Та ну нафіг! :-) Считаю, что ничего хорошего из этого не получится!


Top
   
PostPosted: 28 May 2021, 11:00 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Вот подготовил из черновиков
Attachment:
Вывод спрайта и опрос кл.7z [1.67 KiB]
Downloaded 515 times
думаю разберёшся!
Или же декомпилируй как хочешь и чем хочешь _res.LVT которые в архиве
Code:
{тестовая программа вывода спрайта на экран и изменеия цвета экрана нажатием на "2"
спрайты из игры "Лабиринт"}
program Project; uses  uMD01u in 'uMD01u.pas';

VAR
EE_Cycle,
byte_DrawSPRITE1_X,byte_DrawSPRITE1_Y,byte_DrawSPRITE1_SM,
Call_DrawSPRITE1,Call_DrawSPRITE1_cicle1,Call_DrawSPRITE1_cicle2,
Proc_Color_RET,Byte_Color,Proc_Color_cycle1,Proc_Color,
SPRITEa, SPRITEb
:TLabelLV;

BEGIN
INITCompiler;
SetFullNameLVTfile('_res.LVT');
SetNameInternalKOI(#$20+#$20+#$20+#$20+#$20+#$20);
SetAddrRAM($8000);

StartProgram;

{Установки для спрайтов}
MviA($02);Sta(byte_DrawSPRITE1_X);    //- ширина (в байтах (1 байт = 4 пикселя))
MviA($08);Sta(byte_DrawSPRITE1_Y);    //- высота
MviA($3E);Sta(byte_DrawSPRITE1_SM);    // - смещение (byte_DrawSPRITE1_SM=64-byte_DrawSPRITE1_X)

{Установки и вывод первого спрайта}
LxiDE(SPRITEa);    //(адрес спрайта)
LxiHL($7008); // Позиция в ВидеоОЗУ
Call(Call_DrawSPRITE1);   // Вывод спрайта на экран

{Установки и вывод второго спрайта}
LxiDE(SPRITEa);LxiHL($7036);Call(Call_DrawSPRITE1);

{Установки и вывод третьего спрайта}
LxiDE(SPRITEb);LxiHL($7218);Call(Call_DrawSPRITE1);

{бесконечный цикл опрос клавиатуры и смена цвета экрана }
LabelA(EE_Cycle); Call(Proc_Color); Jmp(EE_Cycle);


{Процедура вывода спрайта на экран}
{ЗАДАЕМ ПАРАМЕТРЫ СПРАЙТА
//Процедура proc_DrawSPRITE1(Вывод спрайта на экран)
DEr(адрес спрайта)
HLr(ВидеоОЗУ(+$4000))
byte_DrawSPRITE1_X, - ширина (в байтах (1 байт = 4 пикселя))
byte_DrawSPRITE1_Y, - высота
byte_DrawSPRITE1_SM - смещение (byte_DrawSPRITE1_SM=64-byte_DrawSPRITE1_X)
}
LabelA(Call_DrawSPRITE1);
XraA;Out_($C2); // включить видео ОЗУ

LABELp1(byte_DrawSPRITE1_Y); // метка на второй байт MviB($00); (ниже)
   MviB($00);

 LabelA(Call_DrawSPRITE1_cicle2);

   LABELp1(byte_DrawSPRITE1_X);// метка на второй байт MviC($00);(ниже)
     MviC($00);

    LabelA(Call_DrawSPRITE1_cicle1);
      LdaxDE;
      MovMA;
      InxHL;
      InxDE;
      DcrC;
    Jnz(Call_DrawSPRITE1_cicle1);

    PushDE;
    LABELp1(byte_DrawSPRITE1_SM);// метка на второй и третий байт LxiDE($0000);
    LxiDE($0000); DadDE;   // приплюсовать смещение т.е. HL=HL+byte_DrawSPRITE1_SM
    PopDE;

    DcrB;
 Jnz(Call_DrawSPRITE1_cicle2);

MviA($02);Out_($C2); // отключить видео ОЗУ
RET;

{Процедура Опроса нажатия кл "2"}
{Byte_Color - переменная установленного цвета}
LabelA(Proc_Color);
  { изменения цвета нажатием на  '2'}
  MviA($EF);Out_($D0);// посылаем на порт $D0, '11101111'{$EF}
  In_($D1); // опрашиваем порт $D1
  Cpi($BF); //'10111111'){BF});   // сравниваем нажата ли "2"
  Jnz(Proc_Color_RET);// если не нажата выход

{если же нажата .....}
{Byte_Color = Byte_Color+4}
Lda(Byte_Color); MovBA; MviA($04); AddB; Sta(Byte_Color);
Out_($C1); // { отправиляем Byte_Color на порт $C1 }

    {Ожидаем отжатия "2"}
    LabelA(Proc_Color_cycle1);
    MviA($EF);Out_($D0); // посылаем на порт $D0, '11101111'{$EF}
    In_($D1); // опрашиваем порт $D1
    Cpi($BF); //'10111111'){BF});   // сравниваем нажата ли "2"
    Jz(Proc_Color_cycle1); // если не ОТЖАТА, - переход LabelA(Proc_Color_cycle1);

LabelA(Proc_Color_RET);  RET;
LabelA(Byte_Color);DB($00);   // переменная цвета




LabelA(SPRITEa);
DB($80);DB($10);DB($73);DB($EC);DB($30);DB($C0);DB($74);DB($E2);DB($74);DB($E2);
DB($30);DB($C0);DB($51);DB($A8);DB($80);
DB($10);

LabelA(SPRITEb);
DB($99);DB($99);DB($77);DB($EE);DB($77);DB($EE);DB($FF);DB($FF);DB($FF);DB($FF);
DB($77);DB($EE);DB($77);DB($EE);DB($99);DB($99);

FINALCompiler;
END.



Top
   
PostPosted: 28 May 2021, 11:06 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Спрайты в примере были "получены" вот таким вот образом!
(Это чтобы имел представление "перевода" пикселов-спрайтов в байты)
(из игры "Лабиринт")
Code:
VarSprite(SPRITE241,'SPRITE241',' ','1','2','3',{Человечек}
'2      2'+
' 233332 '+
'  2222  '+
' 322223 '+
' 322223 '+
'  2222  '+
' 2 33 2 '+
'2      2'
);
VarSprite(SPRITE1,'SPRITE1',' ','1','2','3',{Голова змеи}
'3  33  3'+
' 333333 '+
' 333333 '+
'33333333'+
'33333333'+
' 333333 '+
' 333333 '+
'3  33  3'
);


Top
   
PostPosted: 29 May 2021, 14:46 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
Quote:
У меня сейчас к сожалению МАДЛ "раздолбан", когда я его соберу до кучи не знаю, но попытаюсь подкинуть какие-то полезности.
Понимаешь, на МАДЛе придётся переписывать под К580 всё. А на K580Dev только низкий уровень. Хотя твой подход, вероятно, обладает большим потенциалом по скорости работы игры. Тут я не собираюсь спорить.
Quote:
процедура вывода тайла на экран есть ?
Увы. Я ж не знаю Львова. Вернее как. Я понял как устроен экран Львова (уже примерно программил подобное для БК0010 и DOS/CGA, но там же другие процы. Вот мне интересно какими командами 8080 лучше выводить тайл.
Quote:
Такой звук как на ПК-01 и Спектруме, можна и "отфутболить" :-)
это ж не АТАРИ!
Ну да, звук можно и через ПЗУ выводить. Там главное сделать пересчёт частоты и длительности для Львова.
Quote:
Quote:
Но мне хочется заморочиться и сделать лабиринты без скроллинга.
Вот эта фраза мне не очень-то понятна.
Ну, чтобы лабиринт был на экране сразу весь виден. Без прокрутки, когда подходишь к краю экрана.
Quote:
Ты исходники то на Обероне не собираешься выложить ?... чтобы возможный соблазн возник у кого-то.
Конечно собираюсь. После опубликования результатов конкурса выложу.
Quote:
По ходу Boulder Dash который уже есть для ПК-01
http://pc01.lviv.ua/games/page.php?name=boulderdash
ты уже видел ?
Угу, местами. atmavan показывал на сайте. Кстати, для Львова есть неплохие шахматы, я впечатлился.
Quote:
Это не про этот ли скролинг ты говоришь ?... т.е чтобы весь уровень в экран не вмещался ?
Та ну нафіг! :-) Считаю, что ничего хорошего из этого не получится!
Поясни. Считаешь, что со скроллингом плохо или без скроллинга плохо?

Размер тайла 8x8 будет мелковат. ИМХО. Таким макаром можно было бы и на Спеке цветное сделать. Но мелко. Надо побольше. Ну и полезная площадь экрана гулять будет почём зря.


Top
   
PostPosted: 29 May 2021, 17:35 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
Quote:
Спрайты в примере были "получены" вот таким вот образом!
Знаешь, ещё в бородатом году в описании GP-Forth были подобные фортели - прямо в коде задавался лабиринт в ASCII и раскодировался на лету, потому что Форт - это интерпретатор и компилятор два-в-одном. Очень гибкий, но бесхребетный. У каждого серьёзного Форт-кодера свой неповторимый стиль, который хейтят другие Форт-кодеры, потому что не понимают.

Такая аналогия: червяк очень гибок, но не может стоять прямо, как позвоночный человек. Излишняя гибкость тоже вредна, нужен какой-то каркас. Фортом я интересовался в прошлом, пока не понял, насколько там отвратительная модульность и вообще - насколько рыхлые и протекающие инструменты предлагает Форт, чтобы на их основе строить свои абстракции.

Так что я делал примерно ту же работу, да вот недавно для подготовки уровней Bolder16K наваял небольшую утилитку на Обероне и ею кодировал уровни из ASCII в массив упакованных данных.
Code:
MODULE Levels; IMPORT IO := Console; (*$MAIN*)

VAR
  n, bitpos, cell4: INT32;
  map: ARRAY 16, 17 OF CHAR;

TYPE
  HexType = ARRAY 16 OF CHAR;

CONST
  Hex = HexType (
    "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"
  );

PROCEDURE WriteHex (i: INTEGER);
BEGIN
  IO.WriteStr("0x"); IO.WriteCh(Hex[i DIV 16]); IO.WriteCh(Hex[i MOD 16]);
END WriteHex;

PROCEDURE Init;
BEGIN
  bitpos := 0; cell4 := 0;
END Init;

PROCEDURE Add (cell: INTEGER);
BEGIN
  (* Покрутить cell в нужную битовую позицию *)
  INC(cell4, ASH(cell, bitpos)); (* Прибавить 3 бита к ячейке *)
  INC(bitpos, 3); (* Увеличить счётчик бит на 3 *)
  IF bitpos >= 8 THEN
    WriteHex(cell4 MOD 100H); IO.WriteStr(", ");
    cell4 := cell4 DIV 100H; DEC(bitpos, 8); (* 8 бит убыло из очереди *)
  END;
END Add;

PROCEDURE Do;
  VAR x, y: INTEGER;
BEGIN
  Init;
  FOR y := 0 TO 15 DO
    FOR x := 0 TO 15 DO
      CASE map[y, x] OF
      | " ": Add(0) (* None *)
      | ":": Add(1) (* Grass *)
      | "@": Add(2) (* Stone *)
      | "$": Add(3) (* Almas *)
      | "+": Add(4) (* StopMan *)
      | "#": Add(5) (* Wall *)
      | "&": Add(6) (* Mina *)
      | "%": Add(7) (* Babo *)
      ELSE
        IO.WriteCh(map[y, x]); IO.WriteLn; HALT(1)
      END;
    END;
  END;
END Do;

BEGIN
  n := -1;
  INC(n); map[n] := "#####@  + @#####";
  INC(n); map[n] := "#::::::::::::::#";
  INC(n); map[n] := "#:::: :::: ::::#";
  INC(n); map[n] := "#:::: :::: ::::#";
  INC(n); map[n] := "#:::: :::: ::::#";
  INC(n); map[n] := "#:### :::: ###:#";
  INC(n); map[n] := "#@#$:&::::&:$#@#";
  INC(n); map[n] := "#$@#: :::: :#@$#";
  INC(n); map[n] := "#:$@# :::: #@$:#";
  INC(n); map[n] := "#::$@#::::#@$::#";
  INC(n); map[n] := "#:::$@::::@$:::#";
  INC(n); map[n] := "#::::$::::$::::#";
  INC(n); map[n] := "#::::::::::::::#";
  INC(n); map[n] := "#::::::::::::::#";
  INC(n); map[n] := "#$$$$$$$$$$$$$$#";
  INC(n); map[n] := "################"; 
  n := -1;
  INC(n); map[n] := ":::::::::::::::+";
  INC(n); map[n] := ":@::::::::::::::";
  INC(n); map[n] := ":###############";
  INC(n); map[n] := "               #";
  INC(n); map[n] := " ############# #";
  INC(n); map[n] := " #           # #";
  INC(n); map[n] := " ########### # #";
  INC(n); map[n] := " #&#       # # #";
  INC(n); map[n] := " #&# ##### # # #";
  INC(n); map[n] := " #&# #$### # # #";
  INC(n); map[n] := " # # #$    # # #";
  INC(n); map[n] := " # # ####### # #";
  INC(n); map[n] := " # #         # #";
  INC(n); map[n] := " # ########### #";
  INC(n); map[n] := " #             #";
  INC(n); map[n] := " ###############";

  n := -1;
  INC(n); map[n] := "+               ";
  INC(n); map[n] := "##:##:##:##:##:#";
  INC(n); map[n] := "##:##:##:##:##:#";
  INC(n); map[n] := "#:$@:$@:$@:$@:$#";
  INC(n); map[n] := "#:##:##:##:##:##";
  INC(n); map[n] := "#:##:##:##:##:##";
  INC(n); map[n] := "#$@:$@:$@:$@::@#";
  INC(n); map[n] := "###:##:##:##:###";
  INC(n); map[n] := "###:##:##:##:###";
  INC(n); map[n] := "#::::::::::::::#";
  INC(n); map[n] := "#::::::::::::::#";
  INC(n); map[n] := "#::::::::::::::#";
  INC(n); map[n] := "#::::::::::::::#";
  INC(n); map[n] := "#%            %#";
  INC(n); map[n] := "#$$$$$$$$$$$$$$#";
  INC(n); map[n] := "################";

  n := -1;
  INC(n); map[n] := "$$$$$$$$$$$$$$$$";
  INC(n); map[n] := "                ";
  INC(n); map[n] := "&&&&&&&&&&&&&&&&";
  INC(n); map[n] := "                ";
  INC(n); map[n] := "$$$$$$$$$$$$$$$$";
  INC(n); map[n] := "                ";
  INC(n); map[n] := "%%%%%%%%%%%%%%%%";
  INC(n); map[n] := "                ";
  INC(n); map[n] := "$$$$$$$$$$$$$$$$";
  INC(n); map[n] := "                ";
  INC(n); map[n] := "                ";
  INC(n); map[n] := "                ";
  INC(n); map[n] := "                ";
  INC(n); map[n] := "                ";
  INC(n); map[n] := "      ::::      ";
  INC(n); map[n] := "+               ";

  n := -1;
  INC(n); map[n] := ":   #:@: :@:#   ";
  INC(n); map[n] := ":   #::: :::#   ";
  INC(n); map[n] := ": # #: # # :# # ";
  INC(n); map[n] := ": # #: # # :# # ";
  INC(n); map[n] := ": # #: # # :# # ";
  INC(n); map[n] := ": # #: # # :# # ";
  INC(n); map[n] := ": # #: # # :# # ";
  INC(n); map[n] := ": # #: # # :# # ";
  INC(n); map[n] := ": # #: # # :# # ";
  INC(n); map[n] := ": # #: #@# :# # ";
  INC(n); map[n] := ": # #: #+# :# # ";
  INC(n); map[n] := ": # #: # # :# # ";
  INC(n); map[n] := ": # #: # # :# # ";
  INC(n); map[n] := ": # #: # # :# # ";
  INC(n); map[n] := ":&#@#: # # :#@#&";
  INC(n); map[n] := ":$#:$:%# #%:$:#$";

  n := -1;
  INC(n); map[n] := "+:@@:$#@@:$#:::$";
  INC(n); map[n] := "::::::#::::#::::";
  INC(n); map[n] := "::::::#::::#::: ";
  INC(n); map[n] := "::::::#::::#::: ";
  INC(n); map[n] := "::::::#::::#::: ";
  INC(n); map[n] := "::::::#::::#::: ";
  INC(n); map[n] := "::::::#::::#::: ";
  INC(n); map[n] := "::::::#::::#:::&";
  INC(n); map[n] := "     &#   &#:::&";
  INC(n); map[n] := "##############@:";
  INC(n); map[n] := "##############:$";
  INC(n); map[n] := "@@@@@@@@@@@@@@::";
  INC(n); map[n] := "@@@@@@@@@@@@@@::";
  INC(n); map[n] := "::::::::::::::::";
  INC(n); map[n] := ":###############";
  INC(n); map[n] := ":$:$:$:$:$:$:$:$";

  n := -1;
  INC(n); map[n] := "+#:          @:#";
  INC(n); map[n] := ":#: ##########:#";
  INC(n); map[n] := ":#: ##$#$#$#$#:#";
  INC(n); map[n] := ":#: :#@#@#@#@#:#";
  INC(n); map[n] := ":#: :#:#:#:#:#:#";
  INC(n); map[n] := ":#: :::::::::#:#";
  INC(n); map[n] := ":#: :::::::::#:#";
  INC(n); map[n] := ":#: :::::#####:#";
  INC(n); map[n] := ":#: :::::#   #:#";
  INC(n); map[n] := ":#:&$::::#@  #:#";
  INC(n); map[n] := ":#::######:: #:#";
  INC(n); map[n] := ":#::#:@  #:: #:#";
  INC(n); map[n] := ":####::: #:: #:#";
  INC(n); map[n] := ":@  #::: #:: #:#";
  INC(n); map[n] := "### #::: #:: #:#";
  INC(n); map[n] := "::#%#:::%#::%#:#";

  n := -1;
  INC(n); map[n] := "@:@:@:@:@:@:::::";
  INC(n); map[n] := "+:::::::::::::::";
  INC(n); map[n] := "            #:::";
  INC(n); map[n] := "            #   ";
  INC(n); map[n] := "            #   ";
  INC(n); map[n] := "            # # ";
  INC(n); map[n] := "            # # ";
  INC(n); map[n] := "            # # ";
  INC(n); map[n] := "            # # ";
  INC(n); map[n] := "            # # ";
  INC(n); map[n] := "            # #%";
  INC(n); map[n] := "            # #$";
  INC(n); map[n] := "            # #:";
  INC(n); map[n] := "            #@#$";
  INC(n); map[n] := "&%&%&%&%&%&%#:#:";
  INC(n); map[n] := "%&%&%&%&%&%&::#$";

  n := -1;
  INC(n); map[n] := "  @    +    @   ";
  INC(n); map[n] := " #:#:#:##:#:#:# ";
  INC(n); map[n] := " #:#:#:$$:#:#:# ";
  INC(n); map[n] := " #:#:$::::$:#:# ";
  INC(n); map[n] := " #:$::####::$:# ";
  INC(n); map[n] := " #::##:##:##::# ";
  INC(n); map[n] := "%###:::##:::###&";
  INC(n); map[n] := "%#::::$##$::::#&";
  INC(n); map[n] := "##:::::##:::::##";
  INC(n); map[n] := "::##:::##:::##::";
  INC(n); map[n] := "::::##:##:##::::";
  INC(n); map[n] := ":::::::##:::::::";
  INC(n); map[n] := "::::::::::::::::";
  INC(n); map[n] := "::::::::::::::::";
  INC(n); map[n] := "######::::######";
  INC(n); map[n] := "$&    ::::    %$";

  n := -1;
  INC(n); map[n] := " ::#::::  @:::::";
  INC(n); map[n] := " ::@#::# #:$::::";
  INC(n); map[n] := " ::#:::#%#::::::";
  INC(n); map[n] := " ::#:::###::::::";
  INC(n); map[n] := " ::#::#&#&#:::::";
  INC(n); map[n] := " ::#::# # #:::::";
  INC(n); map[n] := " ::#:#%#%#%#::::";
  INC(n); map[n] := " ::#:# # # #::::";
  INC(n); map[n] := " ::#:###$###:::&";
  INC(n); map[n] := "&::#:#######::::";
  INC(n); map[n] := ":::#:::::::&::::";
  INC(n); map[n] := ":::#::&::::::&::";
  INC(n); map[n] := ":::#:::::::&::::";
  INC(n); map[n] := ":::#::::::::::::";
  INC(n); map[n] := ":::#&:::&::::::&";
  INC(n); map[n] := "::+#:::::::::&::";

  n := -1;
  INC(n); map[n] := "   @  +@   @    ";
  INC(n); map[n] := " ##::::##::####:";
  INC(n); map[n] := " ##:: ##:# ##::#";
  INC(n); map[n] := " ##:: ##:# ##::#";
  INC(n); map[n] := " ##:: ##:: ##::#";
  INC(n); map[n] := " ##:: :##: ##::#";
  INC(n); map[n] := " ##:: ::## ####:";
  INC(n); map[n] := " ##:: #:## ##:::";
  INC(n); map[n] := "%##:#%#:##%##:::";
  INC(n); map[n] := "$####$:##:$##:::";
  INC(n); map[n] := "::::@::::@::::@:";
  INC(n); map[n] := ":##::##::###:##:";
  INC(n); map[n] := "#:: #$$# #$# #$#";
  INC(n); map[n] := "#:: #$$# #$# #$#";
  INC(n); map[n] := "#::&#$$#%##:&##:";
  INC(n); map[n] := ":##$:##:$#:#$#::";

  n := -1;
  INC(n); map[n] := "                ";
  INC(n); map[n] := "                ";
  INC(n); map[n] := " ::@:::::::::##:";
  INC(n); map[n] := " :::::::::##&##%";
  INC(n); map[n] := " ::::::##&##%##&";
  INC(n); map[n] := " ::@:::##%##&##%";
  INC(n); map[n] := "@::::#&##&## ## ";
  INC(n); map[n] := ":::::#%## ## ## ";
  INC(n); map[n] := ":::@:# ## ## ## ";
  INC(n); map[n] := ":::::# ## ## ## ";
  INC(n); map[n] := ":#####$##$##$##$";
  INC(n); map[n] := ":###############";
  INC(n); map[n] := ":@@@@@@@@@@@@@@@";
  INC(n); map[n] := ":@%@%@%@%@%@%@%@";
  INC(n); map[n] := ":@@@@@@@@@@@@@@@";
  INC(n); map[n] := ":::::::::::::::+";

  n := -1;
  INC(n); map[n] := "&: $:$:$:$:$:$:$";
  INC(n); map[n] := "    : : : : : : ";
  INC(n); map[n] := "  :%:%:%:%:%:%:%";
  INC(n); map[n] := ":$:$:$:$:$:$:$:$";
  INC(n); map[n] := ": : : : : : : : ";
  INC(n); map[n] := ":%:%:%:%:%:%:%:%";
  INC(n); map[n] := ":$:$:$:$:$:$:$:$";
  INC(n); map[n] := ": : : : : : : : ";
  INC(n); map[n] := ":%:%:%:%:%:%:%:%";
  INC(n); map[n] := ":$:$:$:$:$:$:$:$";
  INC(n); map[n] := ": : : : : : : : ";
  INC(n); map[n] := ":%:%:%:%:%:%:%:%";
  INC(n); map[n] := ":::$:$:$:$:$:$:$";
  INC(n); map[n] := "::: : : : : : : ";
  INC(n); map[n] := ":::&:&:&:&:&:&:&";
  INC(n); map[n] := "+$ $ $ $ $ $ $ $";

  n := -1;
  INC(n); map[n] := ":#$#::::::::#:#:";
  INC(n); map[n] := ":#:#:$:$$:$:#:#:";
  INC(n); map[n] := ":#&#::+:::@:#:@@";
  INC(n); map[n] := ":#@#:#:##:#:# #:";
  INC(n); map[n] := ":#@#:#:##:#:: #$";
  INC(n); map[n] := "##@###:##::@# ##";
  INC(n); map[n] := ":::::::##:::# ::";
  INC(n); map[n] := ":::########## ::";
  INC(n); map[n] := ":#:########## ::";
  INC(n); map[n] := ":#:#:$:##@:::%::";
  INC(n); map[n] := ":#:#:#:##@####:#";
  INC(n); map[n] := ":#:#:#:##@#@:#::";
  INC(n); map[n] := ":#:#:#:##@#:::@:";
  INC(n); map[n] := ":#:#:#:  :# :#::";
  INC(n); map[n] := ":#:#:#:  :# :#::";
  INC(n); map[n] := "$#:$:#:  :#%:#:$";

  (*n := -1;
  INC(n); map[n] := "$:::::::::::::::";
  INC(n); map[n] := ":@:::::+::::::::";
  INC(n); map[n] := "::##############";
  INC(n); map[n] := "::#$:##:##:$#:: ";
  INC(n); map[n] := "::#:$##:@#$:#:# ";
  INC(n); map[n] := "::#$:##:##:$#:# ";
  INC(n); map[n] := "::#:$:::::$:#:# ";
  INC(n); map[n] := "::#####:#####:# ";
  INC(n); map[n] := "::#:::#:#:::#:# ";
  INC(n); map[n] := "::#@:##:##:@#:# ";
  INC(n); map[n] := "::#: ##:## :#:# ";
  INC(n); map[n] := "::#: ##:## :#:# ";
  INC(n); map[n] := "::#$&##:##&$#:# ";
  INC(n); map[n] := "::#####:#####:# ";
  INC(n); map[n] := "::::::::::::::# ";
  INC(n); map[n] := "::::::::::::::#%";*)

  n := -1;
  INC(n); map[n] := "################";
  INC(n); map[n] := "#:::::::::::::+#";
  INC(n); map[n] := "#::::::::::::::#";
  INC(n); map[n] := "#::#:###########";
  INC(n); map[n] := "#::# ##$:::#%::#";
  INC(n); map[n] := "#::# ####:#  #:#";
  INC(n); map[n] := "#::#%####::# #:#";
  INC(n); map[n] := "#::### ##$:# #:#";
  INC(n); map[n] := "#::::# ###:# #:#";
  INC(n); map[n] := "#::::#%###:# #:#";
  INC(n); map[n] := "#::::### ### #:#";
  INC(n); map[n] := "#::::::# ### #:#";
  INC(n); map[n] := "#@:::::#%###@#:#";
  INC(n); map[n] := "#::::::###:#:#:#";
  INC(n); map[n] := "#::::::::#$::::#";
  INC(n); map[n] := "################";

  (*n := -1;
  INC(n); map[n] := "               %";
  INC(n); map[n] := " ##############$";
  INC(n); map[n] := "               #";
  INC(n); map[n] := "############## #";
  INC(n); map[n] := "              +#";
  INC(n); map[n] := " ###############";
  INC(n); map[n] := "               #";
  INC(n); map[n] := "############## #";
  INC(n); map[n] := "               #";
  INC(n); map[n] := " ###############";
  INC(n); map[n] := "               #";
  INC(n); map[n] := "##############:@";
  INC(n); map[n] := " $$$$$$$$$$    :";
  INC(n); map[n] := "              ::";
  INC(n); map[n] := "### ## ## ## ###";
  INC(n); map[n] := "#              #";*)

  (*n := -1;
  INC(n); map[n] := "#::::::@::::::+@";
  INC(n); map[n] := "$#:::::::::::##@";
  INC(n); map[n] := "::#:::::::::#$#@";
  INC(n); map[n] := "#@:#:::::::##@#@";
  INC(n); map[n] := ":@@:#:: ::###@#@";
  INC(n); map[n] := ":@@@@#: :####@#@";
  INC(n); map[n] := ":@@@@@#&#####:#@";
  INC(n); map[n] := ":@@@@::#:::::::@";
  INC(n); map[n] := ":@@@::# #####:#@";
  INC(n); map[n] := ":@@::#: :#:::::@";
  INC(n); map[n] := ":@::#::%::#::::@";
  INC(n); map[n] := ":::#:::&:::#:::@";
  INC(n); map[n] := "$:#:::::::::#::@";
  INC(n); map[n] := ":#:::::::::::#:@";
  INC(n); map[n] := "#:::::::::::::#@";
  INC(n); map[n] := "@@@@@@@$@@@@@@@@";*)

  n := -1;
  INC(n); map[n] := "::::::::::::::$&";
  INC(n); map[n] := ":::::::::::::::#";
  INC(n); map[n] := "    @@@@@@@    #";
  INC(n); map[n] := "    @@@@@@@    #";
  INC(n); map[n] := "    @@@@@@@    #";
  INC(n); map[n] := "    @@@@@@@    #";
  INC(n); map[n] := "    @@@@@@@    #";
  INC(n); map[n] := "    @@@@@@@    #";
  INC(n); map[n] := "    @@@@@@@    #";
  INC(n); map[n] := ":   @@@@@@@   :#";
  INC(n); map[n] := ":   @@@@@@@   :#";
  INC(n); map[n] := "::  @@@@@@@  ::#";
  INC(n); map[n] := "::  @@@@@@@  ::#";
  INC(n); map[n] := "::: @@@@@@@ :::#";
  INC(n); map[n] := "::::::#:#::::::#";
  INC(n); map[n] := ":::::$#+#$:::::#";
  Do;
END Levels.


Top
   
PostPosted: 30 May 2021, 12:11 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Так, Zorko. Если я правильно понимаю твоё "поведение", то...
Ты хочешь, чтобы игра была портирована на ПК-01 "Львов", но при этом так или иначе не хочеш, чтобы портировать её самому! Хочешь чтобы это сделал кто-то другой, причём на XDev! Потому, что считаешь, что так лучше и проще и XDev заинтересует и т.д.

Теперь моё видение этого всего и мои хотелки...
Я хочу, для начала увидеть исходники на обероне и только потом о чём-то думать (или не думать вообще) о том как это может быть портировано(мною)!
XDev я точно не буду заниматься ради портрования игры или вообще чего либо! Уж слишком плохие у меня впечатления об XDev, по собственному опыту!
Возможно, мне проще с оберона перекинуть исходник на Дельфи и прикрепить к ней так называемый у меня P_Emul, который представляет из себе модуль ПК-01, т.е. пишеш как на дельфи, а экран, опрос клавиатуры, пзу, - это все от ПК-01! И далее после такой "обработки" P_Emul и всяких "утрясаний", код дельфи очень легко портировать на асм (мадл). Таким образом я писал "Лабиринт", по другому просто не смог бы!
Ну ты понял, да ?!
Это когда-то были люди в 90-е которые если не врут, то сначала писали на ВАСИКе той машины, а только потом в маш.код "перебивали" с ВАСИКа, ну им так проще было и надёжней. Вот и у меня такое, - пишу на дельфи где P_Emul, модуль ввода с клавы и вывода на экран, т.е. всё уже будет "подточено" под ПК-01, останется рутина - "перебить" то с Дельфи в АСМ ПК-01. Естественно когда пишешь на дельфи под P_Emul, то пишеш, с учётом, что это всё будешь "перебивать" в АСМ580, т.е. сответственно применяешь в дельфи конструкции которые "видишь в мозгах" как они будут "перебиваться" и не применяешь чего-то сложного!
Также прямо в P_Emul можна использовать команды-АСМ580 (в виде процедур) и заменять каждую процедуру писанную на дельфи теми командами проверяя сразу на работоспособность! и т.д.

И теперь главное,
если же твои видения этого всего и твои хотелки, явно противоречат моим видениям этого всего и моим хотелкам, - то как говориться, приношу извинения, нам не по пути! Жди другого "пассажира" которого заинтересует эта тема, т.е. портирование данной игрушки таким образом как подходит тебе! У меня лично, есть жалание ПОПРОБОВАТЬ портировать, но исключительно своими методами, на не навязанными тобой XDev!
Quote:
Поясни. Считаешь, что со скроллингом плохо или без скроллинга плохо?
Считаю, что ты правильно сделал, что всё на экране! А не часть уровня!
Quote:
Размер тайла 8x8 будет мелковат. ИМХО. Таким макаром можно было бы и на Спеке цветное сделать. Но мелко. Надо побольше. Ну и полезная площадь экрана гулять будет почём зря.
Об этом и подобном можно и нужно говорить когда будут исходники! И делать пробы всего - и 16х16 и 8х8 и т.д.


Top
   
PostPosted: 31 May 2021, 02:29 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
als, ну мне честно не очень интересен Львов, чтобы сильно погружаться в его изучение. Я уже говорил, что платформы второстепенны. Первичны языки, на которых мы выражаем наши абстракции. Притом асм - неизбежное зло машинной эры, а на Обероне мы думаем и проектируем.

Так что я бы стал заниматься портом только чтобы кого-то заинтересовать своими способами разработки. Но большого притока "пассажиров", как ты выразился, не ожидаю.

Тайлы на Львове лучше всего по ширине сделать 12 пикселей (чтобы не заниматься битовыми наложениями при выводе). А по высоте сколько получится, это уже не столь критично.

Твои способы разработки игры на МАДЛе не очень интересуют, без обид.


Top
   
PostPosted: 31 May 2021, 12:42 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Quote:
Притом асм - неизбежное зло машинной эры, а на Обероне мы думаем и проектируем.
асм - это зло говоришь... :-)
интересное отношение к той "штуке" на которой базируется все что связано с ЭВМ всегда и везде! :-)
А мне по душе мнение одного участника форума АСМа (об языках программирования) - "... такое ощущение, что они все из одной "бочки"... другое дело АСМ, - все ж понятно - регистры, команды, память.."
Я не думаю, что это "зло" которое АСМ можна когда нибуть как нибуть искоренить!
Это быстрее всего все остальное (после Паскаля и СИ), - как мода! Паскаль и СИ похоже тоже "увековечены" как и зло "АСМ"! А всякие питоны, джавы и прочая дуристика, сама себя "розвалит" своей же "крутизной", "навороченностю", неэфективностью по сравнению с АСМом (Паскалем и СИ)!
Quote:
Так что я бы стал заниматься портом только чтобы кого-то заинтересовать своими способами разработки. Но большого притока "пассажиров", как ты выразился, не ожидаю.
Ну тут конечно очень интересный и спорный момент (как по мне)...
Придется сосредоточится.
А что если я тебя попорошу булдер (такой какой он есть для спека) перекомпилировать для КР580, таким образом чтобы вместо процедур, которые базовые для спека (которые не могут быть компилированны в КР580) оставить к примеру вот такое
Procedure DrawSprite; {например базовая процедура спека для вывода спрайта }
Begin
JMP($FFF1); {тут любой уникальный признак лишь бы можна было найти это когда декомпилируешь код КР580, т.е понятное дело JMP($FFF1) на уникальное число $FFF1 в декомпиляции КР580 найти не сложно! и так по каждой базовой процедуре, отдельный уникальный переход все равно какой адрес самого перехода лишь бы был уникальным и не использовался где-то еще в программе }
end;
лишь бы ОСНОВНОЙ код был компилирований для КР580!
Далее я, декомпилирую то что получилось. И с помощью твоего исходника-булдера-на-Обероне, в декомпилируемом файле называю (метки, переменные и т.е.) все так, как в иходнике-Оберона.
И соответственно декомпилируемый файл можна будет попытаться довести до ума для ПК-01 и т.д....

А теперь внимание вопрос:
1. Считаешь ли ты, что это все, описанное выше, все таки "подогреет" интерес, к твоим способам разработки ? Если "да", то готов ли ты сделать, то что я прошу ?
Ведь как ни крути, игра то писана на Обероне, для спека и просто для того, чтобы она заработала на ПК-01 (на другой платформе), нужны дополнительные действия! Славу то тебе и твоим разработкам никто не отменит! :-)

По большому счёту я наверное такое и сам мог бы "провернуть" если ты предоставишь исходник на Обероне. Но думаю, что много времени потрачу на изучение исходника и всяке пробы. Лучше чтобы это сделал сам автор игры.

Также наверное можно так или иначе на уровне асма спека перекинуть в асм580. Может даже и конвертировщики есть. Пусть даже корявые. Но мне нужно рабираться со спеком и системой команд процесоора спека. А это не входило в какие-то мои интересы.

Quote:
Тайлы на Львове лучше всего по ширине сделать 12 пикселей (чтобы не заниматься битовыми наложениями при выводе). А по высоте сколько получится, это уже не столь критично.
Ну начать пробы можна действительно с 12х12 чтобы не з 16х16. Но без исходников и проб, разговор не о чём! Когда ты говоришь их выложишь ? после 6 июня, когда закончится конкурс ?
Quote:
Твои способы разработки игры на МАДЛе не очень интересуют, без обид.
Ну сам понимаешь к твоей XDev, у меня тоже не лучшее отношение!
Но у меня основания более веские так как я все таки пробовал использовать XDev!
А ты о мадле, так сказать - поверхностно! Ты не пробовал его использовать (хоть как-то, хоть для чего-то). И это равносильно обсуждению фильма которого ты не видел!


Top
   
PostPosted: 01 Jun 2021, 01:56 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
Quote:
интересное отношение к той "штуке" на которой базируется все что связано с ЭВМ всегда и везде! :-)
А мне по душе мнение одного участника форума АСМа (об языках программирования) - "... такое ощущение, что они все из одной "бочки"... другое дело АСМ, - все ж понятно - регистры, команды, память.."
Ты же понимаешь, что ЯВУ изобрели чтобы сгладить различие машинных особенностей, чтобы было проще переносить программы. Всё-таки в абстракциях ЯВУ проглядываются более близкие понятия именно в терминологии решаемых задач. А регистры, стек, флаги - только отвлекают и заставляют думать низкоуровнево.

Я понимаю высокую роль асма для ретро-платформ. Но асм-кодеров и так подавляющее большинство. Поэтому мне интересно сделать что-то на Обероне. Тут я как бы первопроходец. Так что не было идеи кого-то там переплюнуть в использовании платформенных особенностей. Была только мысль показать возможность более лёгкого переноса _специфических_ игр между ретро-платформами.
Quote:
Я не думаю, что это "зло" которое АСМ можна когда нибуть как нибуть искоренить!
Оно всегда будет работать под капотом.
Я питоны и всяческие луа я защищать не собираюсь (кстати, Луа паскалеподобный, говорят). Даже Эрланг похож на Паскаль.
Quote:
А что если я тебя попорошу булдер (такой какой он есть для спека) перекомпилировать для КР580, таким образом чтобы вместо процедур, которые базовые для спека (которые не могут быть компилированны в КР580) оставить к примеру вот такое
Да, такое реально сделать. У нас только два модуля на Обероне - Bolder16K и Labirint:

Image

Насколько я понимаю, ты хотел бы перетранслировать их в асм, оставив остальные модули пустыми, в виде рыбы/скелета, чтобы переписать их для Львова. Да, правильно, я так примерно и предлагал.

Но меня сдерживает один момент. Я не рассматриваю этот Bolder16K как окончательную версию. Изначально это была задумка как можно более точно реализовать вот этот порт для Поиска (DOS/CGA). Потом я быстренько слепил на этих наработках игру для конкурса. Но физика и этих двух игр, в принципе, будет та же, просто уровни другие и шрифты/меню несколько другие.
Quote:
Procedure DrawSprite; {например базовая процедура спека для вывода спрайта }
Begin
JMP($FFF1);
Можно переход не делать, просто будет пустая процедура.
Quote:
А теперь внимание вопрос:
1. Считаешь ли ты, что это все, описанное выше, все таки "подогреет" интерес, к твоим способам разработки ? Если "да", то готов ли ты сделать, то что я прошу ?
Да, без проблем. Тогда на твою долю останется написать только низкий уровень, остальное сделает zcc.
А ты готов потом не плеваться на скорость полученного через Оберон и Си кода? :) Ну мало ли. Львов же более медленный, чем Спектрум. И память экрана побольше чуть ли не 2,5 раз.

Среди почитателей Львова я на подогрев интереса особо не надеюсь. Маловато вас. И игры вы предпочитаете делать заточенные только на Львов - т.е. то, в чём Оберон слаб. А силён он в переносе, но сильно ограничивает то, что переносится. Т.е. игры могут быть только специфические.
Quote:
Ведь как ни крути, игра то писана на Обероне, для спека и просто для того, чтобы она заработала на ПК-01 (на другой платформе), нужны дополнительные действия! Славу то тебе и твоим разработкам никто не отменит! :-)
Да какая там слава, о чём ты. Просто везде пробую продвигать. Кое-что получается, чаще всего нет, честно как на духу.
Quote:
По большому счёту я наверное такое и сам мог бы "провернуть" если ты предоставишь исходник на Обероне. Но думаю, что много времени потрачу на изучение исходника и всяке пробы. Лучше чтобы это сделал сам автор игры.
Представлю после 6-го числа. Хотя он, в принципе, давно уже обитает здесь.
Quote:
Также наверное можно так или иначе на уровне асма спека перекинуть в асм580. Может даже и конвертировщики есть. Пусть даже корявые. Но мне нужно рабираться со спеком и системой команд процесоора спека. А это не входило в какие-то мои интересы.
Там самая сложность в том, что Си для Z80 очень активно использует косвенную адресацию к локальным переменным и аргументам функций через дополнительный регистр IX, которого нет на K580. Ну и дополнительные команды тоже юзает. Так что это сложный способ. В идеале хорошо бы через него сделать, но игра ведь тоже не самоцель. Ну будет ещё одна корявенькая игрушка на Львове, зато с одного исходника со Спеком - это ж прикольно, разве нет? :)
Quote:
Ну начать пробы можна действительно с 12х12 чтобы не з 16х16. Но без исходников и проб, разговор не о чём! Когда ты говоришь их выложишь ? после 6 июня, когда закончится конкурс ?
Да и см. выше ссылку.

Не было мысли тебя отвлекать моей игрой, ты вроде серьёзный занятой разработчик.
Quote:
Ну сам понимаешь к твоей XDev, у меня тоже не лучшее отношение!
Но у меня основания более веские так как я все таки пробовал использовать XDev!
Давай лучше обобщим твою критику XDev и сведём её вообще к критике разрабатывать для К580 на языке высокого уровня в пользу машинного кода.
Quote:
А ты о мадле, так сказать - поверхностно! Ты не пробовал его использовать (хоть как-то, хоть для чего-то). И это равносильно обсуждению фильма которого ты не видел!
Не согласен. Я очень хорошо понял сам принцип МАДЛа - у тебя есть набор процедур на Дельфи, которые ты вызываешь, разрабатывая для Львова, а эти процедуры уже строят машинный код K580. Это очень остроумно - тебе не нужен парсер текста входного кода и прочее - это всё делает компилятор Дельфи, а ты сосредоточился именно на генераторе кода и дополнил его большим набором хитрых возможностей.

Я просто критикую сам подход низкого уровня, вернее даже не то что критикую, просто решил этим не заниматься. Я не талантливый игродел. Я делаю порты, изучаю новые платформы, очень долго вожусь с кодом. Я чисто кодер, но не художник и не музыкант. А для разработки игр нужны разносторонние таланты, так что меня здесь и работа на асме не особо спасёт. Пока как-то так.


Top
   
PostPosted: 01 Jun 2021, 09:34 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Quote:
Ты же понимаешь, что ЯВУ изобрели чтобы сгладить различие машинных особенностей, чтобы было проще переносить программы. Всё-таки в абстракциях ЯВУ проглядываются более близкие понятия именно в терминологии решаемых задач. А регистры, стек, флаги - только отвлекают и заставляют думать низкоуровнево.
Ага! А как же! Еще когда-то васик придумали, чтобы "сгладить различие машинных особенностей". И что с тех пор изменилось ?! Отказались от АСМа ?
Неужели есть такая штуковина, причём мощная как Дельфи, на которой я что бы не написал, нажатием кл. F9, будет создано куча запускных файлов (EXEшники, APKшники) под кучу разных платформ ?! Бери запускной файл какой надо и запускай где надо (в той системе) ?! Не ужели есть такое ?! А я и не знаю ?!
Это риторический вопрос. Лучше не отвечай мне на него! :-) Потому что сам знаеш, что посыпится шквал гнева моего! :-) И сам знаешь какого именно!
Quote:
Я понимаю высокую роль асма для ретро-платформ. Но асм-кодеров и так подавляющее большинство. Поэтому мне интересно сделать что-то на Обероне. Тут я как бы первопроходец. Так что не было идеи кого-то там переплюнуть в использовании платформенных особенностей. Была только мысль показать возможность более лёгкого переноса _специфических_ игр между ретро-платформами.
Да ты что! И как успехи ?! :-)
А под сколько платформ, может компилить твоя разработка и ГЛАВНОЕ есть ли такая ХОТЬ ОДНА ДЕМОНСТРАЦИОННАЯ ПРОГРАММА КОТОРОЯ СКОМПИЛИТСЯ ПОД ЛЮБУЮ ПЛАТФОРМУ БЕЗ ВСЯЧЕСКИХ ПЕРЕДЕЛОК ? (ну кроме "привет мир" конечно :-) ) А-ну удиви меня! Покажи хотя бы одну демонстрационную программу, т.е её код на Обероне! Уж очень интересно посмотреть, что же это за программа такая и что она делает, кроме вывода текст на экран типа "привет мир".
Quote:
Оно всегда будет работать под капотом.
Не очень понятно, - а как это волнует или должно волновать разработчика (или пользователя) ?!
Quote:
Насколько я понимаю, ты хотел бы перетранслировать их в асм, оставив остальные модули пустыми, в виде рыбы/скелета, чтобы переписать их для Львова. Да, правильно, я так примерно и предлагал.
Ну я надеюсь, что у тебя в игре все "завязывается" на процедуры DrawSprite(x,y,Sprite1) и функцию ReadKey которые просто надо будет написать (для ПК-01) а весь остальной код ДЛЯ КР580 будет УЖЕ работоспособным! Спрайты естественно надо будет перерисовать. Но то уже "дело третье". Для начала пусть хотя бы "кубиками" работает!
Quote:
Но меня сдерживает один момент. Я не рассматриваю этот Bolder16K как окончательную версию. Изначально это была задумка как можно более точно реализовать вот этот порт для Поиска (DOS/CGA). Потом я быстренько слепил на этих наработках игру для конкурса. Но физика и этих двух игр, в принципе, будет та же, просто уровни другие и шрифты/меню несколько другие.
Слушай, не вникая в тонкости, скажу так - по моему ты слишком рано и слишком далеко забегаешь! Для начала давай хотя бы одну булдер ХОТЬ КАК-ТО сделаем, чтобы она заработала на ПК-01. Далее видно будет!
Quote:
Можно переход не делать, просто будет пустая процедура.
Ну-ну.. и потом морочся ищи пустые процедуры в декомпилированном коде КР580, и при этом думая какая "пустышка" какой процедуре соответствует... Ведь их то не одна и не две будет такие процедуры которые переписывать нужно ?!
Вот поэтому я и говорю - в тех процедурах должно быть что-то уникальное ВСЕ РАВНО ЧТО!
Quote:
А ты готов потом не плеваться на скорость полученного через Оберон и Си кода? :) Ну мало ли. Львов же более медленный, чем Спектрум. И память экрана побольше чуть ли не 2,5 раз.
Ты не о том волнуешься это уж точно! :-) Для начала, я хочу вообще посмотреть исходник на Обероне и код для КР580. Боюсь, что на этом может быть все и закончится!
Quote:
Среди почитателей Львова я на подогрев интереса особо не надеюсь. Маловато вас. И игры вы предпочитаете делать заточенные только на Львов - т.е. то, в чём Оберон слаб. А силён он в переносе, но сильно ограничивает то, что переносится. Т.е. игры могут быть только специфические.
Ну что я тут могу сказать... У меня был (дома) ПК-01 когда-то, он меня и интересует! Естественно, я "касался" атари, спектрумов, агат, ямаха может еще каких-то ретро машин,(о! вот вспомнил! где-то с "вектор" касалася), но мне они интересны ровно так как я их "касался". Т.е. поиграться в игрушки Будер, монти, риверРайд (это я про атари) и т.д. Програмированием на этих машинах я тогда не занимался. Во всяком случае так как на ПК-01, потому что ПК-01 все таки дома был, а остальные нет! ну "подкидывали" мне домой "спек", "поиск" на какое-то время, но то все не то!

За остальных пользователей (форума) об их интересах я ничего сказать не могу!
Quote:
Да какая там слава, о чём ты. Просто везде пробую продвигать. Кое-что получается, чаще всего нет, честно как на духу.
Ну сам понимаешь, для начала ручками надо, ручками... :-)
Т.е. какую-то одну (может это будет и не булдер даже) перекинуть в ручную, чтобы "прощупать" как оно это все. А потом уже думать как из работающего булдера под КР580, что-то вырезать низкоуровневое вставить в оберон и чтобы оно прям из оберона компилилось! А у тебя сразу без всяких проб замашки "вот этот порт для Поиска (DOS/CGA)".
Во разошёлся однако! :-)
Quote:
Представлю после 6-го числа. Хотя он, в принципе, давно уже обитает здесь.
Ну сейчас гляну чего там такое.
Quote:
Не было мысли тебя отвлекать моей игрой, ты вроде серьёзный занятой разработчик.
Не! Не серьйозный! Скорее всего "находной"! :-) Ты просто попал в такой момент! Как только мне это достаточно наскучит, - бросаю все и "исчезаю" на какой-то период времени, скажет около пол-года - год! Потом, опять настроение появится, - опять занимаюсь! Все что связано з разработками, с ПК-01, оно мне все постольку поскольку! Все под настроение так сказать!
Quote:
Я просто критикую сам подход низкого уровня, вернее даже не то что критикую, просто решил этим не заниматься. Я не талантливый игродел. Я делаю порты, изучаю новые платформы, очень долго вожусь с кодом. Я чисто кодер, но не художник и не музыкант. А для разработки игр нужны разносторонние таланты, так что меня здесь и работа на асме не особо спасёт. Пока как-то так.
Ну тут дело вкуса! И ты и я занимаемся тем что умеем, хочем и интересно! И поэтому сравнивать (как ты там выражался) мягкое с горячим думаю не стоит. Не благодарно это! :-)
А по поводу художника и музыкант.. :) так я тоже не люблю этого в игрушках делать! Вот взять мой "лабирит" там около пяти "несщастных" спрайтов :-) а такое как художество "Рик" от Зели, я врядле б делал! На булдер замашки были разве что в мечтах! :-) потому что я понимал, или его делать такой как на атари или это будет не булдер а "порнография"! А такой как на атари я явно никогда не сделаю! Если брать портацию, тут что ты предложил, ну тут интерес в том, что кодом написания игры, я то не замучен, :-) игра то твоя, - можна и попробовать портировать! Да и спрайты самому нарисовать. Если бы я её писал, врядле б, желание было бы её куда-то вручную портировать да еще и спрайты вручную "перебивать". и т.д.

А вообще, может оказаться, что мы изначально сложную задачу поставили. Как вариант, если СЕЙЧАС ничего не получится с булдер, можно попробывать чего попроще, т.е. игру которая для КР580. Смотри сам. Предлагай. Не я так другой кто-то когда-то может "зацепится" за тему!

Короче, лезу смотреть исходники.


Top
   
PostPosted: 01 Jun 2021, 09:52 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
ДОП. вот еще добавлю по поводу кросплатформенности.
Когда нибуть поколение наших внуков, (нас уже конечно тогда не будет) будут жрать с нашего поколения, что мы были дурнуватые со "своим" кросплатфоремнными ЯВУ.
Они то будут понимать, что надо было еще 1980 году а может и раньше, создать ориентир на "ДОС". И согласно тому ориентиру создавать новые ПК, а новые "ДОС" под новые ПК и т.д. И была бы сейчас "общая" для всех платформ ОС, мало чем отличающаяся в зависимости от самой платформы. И тогда не нужно было бы внутри какой-то отдельной ОС делать кросплатформенные ЯВУ!
Оно бы не мешало существованию каких-то других ОС, для кажной отдельной платформы, но главное была бы общая ОС для всех!
Как однажды приняли решение, что мобилки должны заряжаться от юсб. Помнишь же времена, под каждую мобилку свой блок питания.


Top
   
PostPosted: 01 Jun 2021, 11:16 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Слушай, давай к вопросу подойдем так....
1. Создаёшь новый проект оберона.
2. Вписываешь туда все лишь один спрайт из булдера.
3. Делаешь его вывод на экран (процедура естестенно из булдера) в конкретную точку на екране (или как там).
4. Компилируешь для спека!
5. Компилируешь для КР580! (Вместо проц.вывода на экран "пустышка" наверно ж).
6. Высылаешь это всё мне т.е.компиляцию для спека, для КР580, исходник на обероне простой программы которая должна быть аналогичная той что ниже.


Var DataSprite1=....
Begin
Gr.DrawTile(.... DataSprite1);
Scr.Redraw;
end.

Вот пока и все!
Далее видно будет!


Top
   
PostPosted: 02 Jun 2021, 02:53 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
Image

Хорошо. Вот смотри. На момент вызова этой процедуры адрес тайла находится в HL, а координаты - в соотв. переменных _GrTiles_x и _GrTiles_y - их можно взять в произвольном месте кода.

Как правильнее всего выводить тайлы на Львове - я не знаю. Я бы, скорее всего, вычислил все адреса, потом из (BC) перекидывал в (DE), с прицелом на то, чтобы добавить к DE (при помощи HL) экранное фиксированное приращение при переходе на строку ниже. Никаких проверок на выход за пределы экрана нам делать не нужно - это замедлит работу. По поводу переключения на экранную память в Львове я ещё думаю. Видимо, тайлы надо размещать выше #8000, а лабиринты можно и ниже. Если щёлкать экраном (всего одна операция OUT) будет не накладно, тогда можно переключаться на экранную память в начале вывода тайла, а в конце переключаться назад.

Сделал не совсем то, что ты хотел, но приблизительно. Рыба есть, основа положена. Теперь не надо ничего дизассеблировать, просто добавить в GrTiles.c подпрограмму вывода тайла на асме, перекомпилировать её (GrTiles.Def -> F11). И пересобрать Bolder16K -> F12.

Да, пусть тебя не смущает размер бинаря. Сейчас туда попали все уровни, а они и весят примерно полтора килобайта.


Attachments:
Bolder16K-Lviv.zip [13.38 KiB]
Downloaded 497 times
Top
   
PostPosted: 02 Jun 2021, 11:07 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Attachment:
Bldr.7z [1.96 KiB]
Downloaded 507 times
В архиве
Bolder16K_lvt.dpr - декомпилированный Bolder16K-Lviv\Bolder16K.lvt , очищен и показано как прикручена процедура Call_DrawSPRITE1, ознакомься.
Bolder16K.lvt - УЖЕ моя компиляция выводит тайл 12х12 в самую первую или може правильнее ("нулевую") точку экрана (левый верхний угол)
Bolder16K.Mod - из "Bolder16K-Lviv"
Особое внимание обрати:
Code:
// дале нужно //DE=HL; DEr(адрес спрайта)
MovDH; MovEL;
// впринципе можна попробовать перекрутить процедуру спрайта так, чтобы
// не нужно было делать //DE=HL; но то уже после того как что-то как-то
// заработает!

// в HL нужно высчитать $4000+(Gr_DrawTile_Y*64)+Gr_DrawTile_X
// а еще лучше чтобы была уже готовая таблица соответствия конкретной клетоки
//масиива уровня 16х16
// и начальной точки в Видеопамяти львова конкретной клеточки
// чтобы оно постоянно не высчитывало соответвие какой-то клеточки масиива уровня 16х16
// и начальной точки спрайта в видеопамяти, а брало готовое значение из таблицы!!!
// НО ТО УЖЕ МОЖНА ПОТОМ! ПОКА СДЕЛАЙ ЧТОБЫ ВЫСЧИТЫВАЛО КАЖДЫЙ РАЗ!!!
// КОНЕЧНО БЫСТРОДЕЙСТИВЕ БУДЕТ УЖАС! НО ТО ВСЕ РЕШАЕМО ПОСЛЕ!
// ну на обероне это высчитывание проще ж сделать!!!
/// пока заглушка - LxiHL($4000); см ниже
LxiHL($4000);// $4000 = нулевой адрес ВИДЕО

Call(Call_DrawSPRITE1);// вызов вывода спрайта-Львов
Code:
{!!!! ЕСЛИ РАЗМЕРЫ СПРАЙТА ПОСТОЯННЫ ИХ МОЖНА ЗАДАВТЬ ОДИН ЛИШЬ РАЗ
ЧТОБЫ НЕ ЗАДАВАТЬ КАЖДЫЙ РАЗ ПРИ ВЫВОДЕ СПРАЙТА}
{спрайт 12х12}
MviA(3);Sta(byte_DrawSPRITE1_X);//- ширина (в байтах (1 байт = 4 пикселя))
MviA(12);Sta(byte_DrawSPRITE1_Y);//- ширина (в байтах (1 байт = 4 пикселя))
MviA(64-3);Sta(byte_DrawSPRITE1_SM);//byte_DrawSPRITE1_SM - смещение (byte_DrawSPRITE1_SM=64-byte_DrawSPRITE1_X)
Code:
{Процедура вывода спрайта на экран}
{ЗАДАЕМ ПАРАМЕТРЫ СПРАЙТА
//Процедура proc_DrawSPRITE1(Вывод спрайта на экран)
DEr(адрес спрайта)
HLr(ВидеоОЗУ(+$4000))
byte_DrawSPRITE1_X, - ширина (в байтах (1 байт = 4 пикселя))
byte_DrawSPRITE1_Y, - высота
byte_DrawSPRITE1_SM - смещение (byte_DrawSPRITE1_SM=64-byte_DrawSPRITE1_X)
}
LabelA(Call_DrawSPRITE1);
......................
НУ И НА ВСЕ ОСТАЛЬНОЕ ТОЖЕ ОБРАТИ ВНИМАНИЕ!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 105 posts ]  Go to page 1 2 3 4 57 Next

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
cron
Powered by phpBB® Forum Software © phpBB Limited