Переписал арифметику с нуля. Вместо временных переменных используется стек.
Код:
; dest = (uchar*)(0xE1D5 + x + y*78);
ld hl, (print_x)
ld h, 0
ld de, 57813
add hl, de
push hl
ld d, 78
ld a, (print_y)
call mul_uchar
pop de
add hl, de
ld (print_dest), hl
Основной код пока выглядит еще не очень. Нужно сделать хранение заначений в регистре BC и доделать сравнение (команда CP вместо вызова call e_uchar). И for парсить нелинейно, что бы код был линейным
Код:
main_i ds 1
main_x ds 1
main_buf ds 32
main:
; clrscr();
call clrscr
; print(0, 0, "HELLO");
xor a
ld (print_x), a
ld (print_y), a
ld hl, string0
call print
; itoa(buf, 123);
ld hl, main_buf
ld (itoa_str), hl
ld hl, 123
call itoa
; print(1, 1, buf);
ld a, 1
ld (print_x), a
ld (print_y), a
ld hl, main_buf
call print
; i = 5;
ld a, 5
ld (main_i), a
; for(x=0; x<64; x+=16) {
xor a
ld (main_x), a
l10:
ld d, 64
ld a, (main_x)
call l_uchar
or a
jp z, l11
jp l12
l13:
ld a, (main_x)
add 16
ld (main_x), a
jp l10
l12:
; print(x, i, "12345678.123");
ld a, (main_x)
ld (print_x), a
ld a, (main_i)
ld (print_y), a
ld hl, string1
call print
; }
jp l13
l11:
; while(1) {
l14:
; if(getch() == '1') clrscr();
call getch
ld d, 49
call e_uchar
or a
jp z, l16
call clrscr
l16:
jp l14
l15:
l9:
ret
;----------------------------------
string1 db "12345678.123",0
string0 db "HELLO",0
---------- Post added at 23:56 ---------- Previous post was at 22:47 ----------
1500 строк, 45 Кб