Да, 32 бита не нужны, отрицательные не нужны, аргументы не нужны... Может пусть пишущий игру сам решает по поводу быстродействия?

Кстати, а кто-нибудь вообще видел через какой костыль у меня сейчас реализовано деление? А задумался почему именно так?

Подпрограммы привести к "настоящему" Паскалю. Пример см. в файлах, это то, из чего я пытался собрать demo_z.pas.
demo_z.pas.zip
zxlikepascal_lib.pas.zip

Скрытый текст

Код:
procedure MapSet(p1,p2:pointer; a3,a4,a5,a6:byte);
begin
	asm
		ld    e,(&&p1+0)
		ld    d,(&&p1+1)
		ld    (map_addr_array),de

		ld    e,(&&p2+0)
		ld    d,(&&p2+1)
		ld    (map_addr_sprites),de

		ld    a,(&&a3)
		ld    (map_xscr),a

		ld    a,(&&a4)
		ld    (map_yscr),a

		ld    a,(&&a5)
		ld    (map_width_scr),a

		ld    a,(&&a6)
		ld    (map_height_scr),a

		ld    a,64
		ld    (map_xmax_array),a
		ld    a,64
		ld    (map_ymax_array),a
	end;
end;
[свернуть]

И с выражениями проблема, некоторые опираются на то, что в компиляторе нет 32 бит и отрицательных чисел. Этакий Си-стайл, когда "250+10" может выдать и 260, и 4, и вообще что угодно.