Замена for(a;b;c) на a; do ... c; while(b); ? Я не думал об этом, так как это может сделать программист, но сделаем.
---------- Post added at 01:15 ---------- Previous post was at 01:10 ----------
Слово переписывтаь не совсем корректное. Я сейчас подключаю новые блоки поверх простых конструкций. Расширяем :)
Можно было бы давно оставить в покое кодогенератор, добить синтаксис Си, добавить оптимизатор. Но хочется, что бы потом пальцем не показывали, что бы компилятор работал на уровне или даже лучше компиляторов для Z80.
---------- Post added at 01:31 ---------- Previous post was at 01:15 ----------
Это будет отдельный блок компилятора. Сначала программа сваливается в буфер. Я для этого удобный способ офомил: w.ld_hl_ref(b).ld_d_HL().ld_a_c();
А уже потом, несколько алгоритмов оптимизации будут сверху-вниз и снизу-верх обрабатывать программу.
---------- Post added at 03:18 ---------- Previous post was at 01:31 ----------
Добавил замену команды LD A на INC A, DEC A в зависимости от состояния A. Вам очень этого хотелось :) Еще добавлю CPL туда же и для всех регистров сделаю. Сделал нормальную поддержку операторов && || !
Надо еще расписать все варианты для 16-битной арифметики.
Код:startGame:
push bc
; 375 enemyCount = 0;
xor a
ld (enemyCount), a
; 376 playerX = SPRITE_WIDTH;
ld a, 4
ld (playerX), a
; 377 playerY = SPRITE_HEIGHT;
;o a=4
ld (playerY), a
; 378 gameOver = 0;
xor a
ld (gameOver), a
; 379 fireSize = 2;
ld a, 2
ld (fireSize), a
; 380 fireMax = 2;
;o a=2
ld (fireMax), a
; 381 bombCount = 0;
xor a
ld (bombCount), a
; 382 prevFire = 1;
inc a ;o a=1
ld (prevFire), a
; 383 gameOver = 0;
xor a
ld (gameOver), a
; 385 memset(map1, 0xFF, MAP_WIDTH*MAP_HEIGHT);
ld hl, map1
ld (memset_dest), hl
dec a ;o a=255
ld (memset_v), a
ld hl, 208
call memset
; 386 memcpy(map, lvd, MAP_WIDTH*MAP_HEIGHT);
ld hl, map
ld (memcpy_dest), hl
ld hl, lvd
ld (memcpy_src), hl
ld hl, 208
call memcpy
; 387 memset(times, 0, MAP_WIDTH*MAP_HEIGHT);
ld hl, times
ld (memset_dest), hl
xor a
ld (memset_v), a
ld hl, 208
call memset
; 389 p = map;

