Alex_K(17.05.2021)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Я сначала неправильно подумал про рекурсивный вызов и ничего этого не получил.
А теперь сделал небольшой пример - внутри внешней процедуры объявил две функции и получил то, что надо.
Программа на Паскале
Код:(*$E+*) PROCEDURE A; VAR A,B,C,D:INTEGER; FUNCTION AA:INTEGER; BEGIN AA:=A; END; FUNCTION BB:INTEGER; BEGIN BB:=B; END; BEGIN A:=1; B:=2; C:=AA; D:=BB; END;[свернуть]
Результат на MACRO-11
Код:.GLOBL $RESR6,$RESR5,$KORE,$SAV10,$VER .GLOBL $BEGIN,FILE,$TTY,$END .RADIX 10 MOV (%4),%4 MOV (%4),%4 MOV (%4),%4 MOV (%4),%4 MOV (%4),%4 MOV (%4),%4 MOV (%4),%4 MOV (%4),%4 L1: MOV %4,-(6) JSR %0,$B74 .GLOBL $B74 MOV 10(6),%0 MOV @%0,14(6) JSR %0,$B76 .GLOBL $B76 ADD #2,%6 RTS %7 MOV (%4),%4 MOV (%4),%4 MOV (%4),%4 MOV (%4),%4 MOV (%4),%4 MOV (%4),%4 MOV (%4),%4 MOV (%4),%4 L2: MOV %4,-(6) JSR %0,$B74 MOV 10(6),%0 MOV 2(0),14(6) JSR %0,$B76 ADD #2,%6 RTS %7 L0: .GLOBL A A: SUB #8,%6 JSR %7,$B127 .GLOBL $B127 MOV #1,@%6 MOV #2,2(6) CLR -(6) MOV %6,%4 ADD #2,%4 JSR %7,L1 MOV (6)+,%0 MOV %0,4(6) CLR -(6) MOV %6,%4 ADD #2,%4 JSR %7,L2 MOV (6)+,%0 MOV %0,6(6) ADD #8,%6 RTS %7 .END[свернуть]
nzeemin(17.05.2021)
Я сделал второй проход по основному модулю (KINGOM.PAS), исправил там все ошибки.
Там остаются только два различия - в двух строках вначале должен стоять символ <016>, вместо него я поставил '_', в коде это помечено комментарием {NOTE: Тут в начале символ 016}
- - - Updated - - -
Я пока беру тайм-аут по этой работе - сильно вложился временем и усилиями и поэтому запустил другие свои дела.
Это оригинальная версия КЭ, с которой делали порт на спектрум ?
Под этим названием было множество игр.
Например вот на Бэйсике исходник в книге 1981 года - возможно, отсюда и взято название: http://www.retrotechnology.com/memsh...S.HTM#chapter3
Учитывая несложную механику игры - было множество реализаций, сделанных разными авторами.
Также и с вариантами для Спектрума - скорее всего это было не портирование, а переписывание "по мотивам".
hobot(17.05.2021)
Именно по приведённому исходнику, скорее это "наш вариант"
LA REPUBLIKA DE ANCHURIA
- - - Добавлено - - -
Игрушка была обнаружена на дискетах из коллекции @AFZ , в 90-х мне она не встречалась как-то ! ;-)
Последний раз редактировалось hobot; 17.05.2021 в 21:22.
Эта игрушка мне попалась на Искре-226 в расширенном комплекте - с 8" дискетами и диском Изот-1370. У меня тогда была Э-60 с ЭПМ "Консул" и перфоленточным оборудованием. Как раз, в это время, к нам в политеховскую лабораторию занесло на практику какую-то студентку. Мне предложили загрузить ее хоть чем нибудь, так я взял с той Искры листинг этой игрушки и посадил практикантку набирать этот текст, в перфоленточном Бейсике Э-60. Перфоленту эту я сохранил, когда получилось завести на Э-60 RT11, я скормил эту ПЛ РТ-шному Бейсику, вот это и есть та самая Анчурия.
Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)
По поводу "той самой КЭ" совсем недавно обсуждалось на страницах журнала DOWNGRADE и в теме
https://zx-pk.ru/threads/13979-zhurn...=1#post1087156
Последний раз редактировалось hobot; 17.05.2021 в 23:02.
Правильный KINGM3.PAS
Код:{$E+} {$S+} procedure L57632; procedure CURSORTO(R,C:integer); external; {L57476} procedure ESCJ; external; {L57444} begin CURSORTO(0,0); ESCJ; end; { Разделяем C на тысячи A и остаток B } procedure L57660(var A:integer; var B:integer; var C:real); begin if C > 32000000.0 then C := 32000000.0; A := TRUNC(C / 1000.0); {L57744} B := TRUNC(C - A * 1000.0); end;[свернуть]
hobot(18.05.2021), nzeemin(17.05.2021), Oleg N. Cher(18.05.2021)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)