А какая мотивация это все делать?
---------- Post added at 13:30 ---------- Previous post was at 13:30 ----------
Кажется, vinxru упоминал, что у него есть переведенный на си или куда-то там еще Супер Марио.
Вид для печати
Titus, процитирую сам себя "интересно и полезно" и я надеюсь не только мне. Для меня это достаточная мотивация, учитывая свободное время которое есть у меня.
Я слышал что у каких-то паскальных средств разработки на УКНЦ поддержан режим работы с графикой. Про С я ничего такого не слышал и если их нет, то и смысла особого не вижу (!разработать самому средство разработки! да еще чтоб потом тормозило...)
Я думаю, когда начну код выкладывать, народ что нибудь начнет советовать/комментировать..
На УК-НЦ, так-же как и на ДВК (PDP) - есть несколько вариантов транслятора программ написанных на паскале в ассемблер - это файл PASCAL.SAV
Исходник с расширением .PAS транслируется командой
с системного устройства: PASCAL <OUTFILE>=<INPUTFILE>
на выходе получаем OUTFILE.MAC (только если errors = 0 )
который после прогона через транслятор Ассемблера MACRO.SAV
командой MAC OUTFILE
получаем файл с расширением .OBJ (независимо от количества ошибок)
Который нужно скомпилировать в исполняемый, соединив его с библиотекой
языка ПАСКАЛЬ _ PASCAL.OBJ
с помощью файла LINK.SAV
LIN OUTFILE,PASCAL (так-же через запятую указываются другие необходимые
для компиляции объектные библиотеки процедур и функций)
Спрайты в ПАСКАЛЕ.
Было (есть) два готовых решения для работы со спрайтами.
Первое на базе загрузчика UKLOAD - может и удобное - никогда не пользовался
Зеленоградцы написали свой движок и прибавили к нему граф.редактор спрайтов.
Этот вариант утерян и пока не обнаружен (даже частично). При написании игры (своей) я использовал второй вариант, но у меня там скроллинг был реализован в рамках пошаговой стратегии, что не требовало особой динамики, только что-бы
обеспечить обзор карты. УК-НЦ спрайты рисует быстро (прямоугольники). Опять таки есть всякие хитрости (вроде как). Зеленоградский движок не требовал предварительно запускать или загружать каких-то программ в память ПП, то есть был "честным", второй момент - самое "выгодное" в плане быстродействия графики, это режим экрана (текстового) 40x24. Был так-же разработан шаблон - минимальной программы на ассемблере, где помимо процедур и функций чисто графических, добавлялись удобные с параметрами МАКРОСЫ для смены страниц и планов, установки палитры, вывод спрайтов, работа с клавиатурой, проигрывание муз.(НОТ). Как-то так.
---------- Post added at 14:43 ---------- Previous post was at 14:34 ----------
ДА! Оптимальные размеры прямоугольника - любые значение кратные 8 )
Его надо еще приводить в человеческий вид, оптимизировать под архитектуру без индексной адресации. Я пока сам его не запущу, никому не дам:
Я думаю, что вам не много будет пользы от такого ужаса:
Скрытый текст
Код:void sub_BB9B() {
for(x=8; x != 0xFF; x--) { // LDX #8 loc_BB9D:
m.byte_8 = x; // STX m.byte_8
a = (&m.byte_2A)[x]; // LDA m.byte_2A,X
if(a==0) continue; // BEQ loc_BBF9
if(a & 0x80) { // ASL A BCC loc_BBAC
void sub_BAC8(); sub_BAC8(); // JSR sub_BAC8
continue; // JMP loc_BBF9
} // loc_BBAC:
y = (&m.byte_2A)[x] - 1; // LDY m.byte_2A,X DEY
if(y != 0) { // BEQ loc_BBCE
(&m.byte_2A)[x]++; // INC m.byte_2A,X
add16((&m.byte_93)[x], (&m.byte_7A)[x], m.byte_775, 0); // LDA m.byte_93,X CLC ADC m.byte_775 STA m.byte_93,X LDA m.byte_7A,X ADC #0 STA m.byte_7A,X
a = (&m.byte_2A)[x]; // LDA m.byte_2A,X
if(a != 0x30) goto loc_BBED; // CMP #$30 BNE loc_BBED
(&m.byte_2A)[x] = 0; // LDA #0 STA m.byte_2A,X
continue; // JMP loc_BBF9
} // loc_BBCE:
x += 0xD; // TXA CLC ADC #$D TAX
m.byte_0 = 0x50; // LDA #$50 STA m.byte_0
m.byte_2 = 6; // LDA #6 STA m.byte_2
m.byte_1 = 3; // LSR A STA m.byte_1
a = 0; // LDA #0
void subx_BFDC(); subx_BFDC(); // JSR subx_BFDC
x = m.byte_8; // LDX m.byte_8
a = (&m.byte_AC)[x]; // LDA m.byte_AC,X
if(a == 5) (&m.byte_2A)[x]++; // CMP #5 BNE loc_BBED INC m.byte_2A,X loc_BBED:
loc_BBED:
void loc_F14F(); loc_F14F(); // JSR loc_F14F
void sub_F1A2(); sub_F1A2(); // JSR sub_F1A2
void sub_E23E(); sub_E23E(); // JSR sub_E23E
void loc_E68D(); loc_E68D(); // JSR loc_E68D
} // loc_BBF9: DEX BPL loc_BB9D
} // RTS
void hideAllSprites_8220() {
y = 0; // LDY #0
void hideAllSprites_int_8225(); hideAllSprites_int_8225(); // BIT m.byte_4A0 => continue
}
void hide1toFFsprites_8223() {
y = 4;
void hideAllSprites_int_8225(); hideAllSprites_int_8225(); // continue
}
// Установка для всех спрайтов координаты Y равной 248 (а высота экрана 240)
void hideAllSprites_int_8225() {
a = 0xF8; // LDA #$F8
do { // loc_8227:
(&m.sprite_y_200)[y] = a; // STA $200,Y
y += 4; // INY INY INY INY
} while(y!=0); // BNE loc_8227
} // RTS
[свернуть]
Музыкальную часть я кстати уже перевел на 8080 и выложил в раздел Апогея, если что.
Оригинальный Марио - это старые всем знакомые уровни, поведение монстров, управление, музыка, дохрена уровней всё это в 32 Кб исходного кода и 16 Кб графики.
---------- Post added at 14:53 ---------- Previous post was at 14:52 ----------
Казалось бы, любой компьютер с ОЗУ 48 Кб смог бы потянуть эту игру.
Нет скролла, ну и фиг с ним. Можно поэкранно переключаться. :)
---------- Post added at 15:01 ---------- Previous post was at 14:53 ----------
Игра изнутри похожа на архиватор. Все уровни игры бы не влезли в память, поэтому уровни описываются кодом (формулами). И уровень может генерироваться только слева на право. Именно поэтому в Марио нельзя ходить назад.
Кстати говоря, если уж в этой теме зашёл разговор о портировании игр на УК-НЦ,
хотелось бы спросить у профи, программистов, насколько возможно в теории перенести различные версии Lode Runner c БК0010 на УК-НЦ ?
http://hobot.pdp-11.ru/gamimg/lodebk02.gif
http://hobot.pdp-11.ru/gamimg/newlode00.jpg
http://hobot.pdp-11.ru/gamimg/wexlode101.png
Спасибо! )
:redface:
Да клад и перенесли и свою версию сделали! Что замечательно.
Переносить нужно как Клад, без всяких эмуляторов - там есть на одной из
дискет New_Lode - Titus утверждает, что можно играть в ч\б.
Но мой опыт показывает обратное - играть невозможно по причине например того,
что реакция на кнопки там слишком тормозная.
Это было-бы конечно просто супер иметь отдельные LR.SAV и прочие вариации,
что бы чисто из под системы запускать! )