Pridal jsem dalsi smycky pokud pri inicializaci dat se zjisti ze je to nejaka posloupnost.
Pokud je to +1 a konci to v jednicce jde usetrit 2 bajty za nastavovani registru A, protoze se nemusi vubec pouzit a pocitadlo smycky je rovnou ukladanou hodnotou. Ale zase smycka je pomalejsi protoze je to djnz.
Kód:
dworkin@dw-A15:~/Programovani/ZX/Forth/M4$ ../check_word.sh 'CREATE(X)PUSHS_COMMA(0x0533,0x0433,0x0333,0x0233,0x0133)'
X EQU __create_X
push HL ; 1:11 0x0533 , 0x0433 , ... 0x0133 , step:-256 to hi=1
ld HL, __create_X ; 3:10 0x0533 , 0x0433 , ... 0x0133 ,
ld BC, 0x0533 ; 3:10 0x0533 , 0x0433 , ... 0x0133 ,
ld (HL),C ; 1:7 0x0533 , 0x0433 , ... 0x0133 ,
inc HL ; 1:6 0x0533 , 0x0433 , ... 0x0133 ,
ld (HL),B ; 1:7 0x0533 , 0x0433 , ... 0x0133 ,
inc HL ; 1:6 0x0533 , 0x0433 , ... 0x0133 ,
djnz $-4 ; 2:8/13 0x0533 , 0x0433 , ... 0x0133 ,
pop HL ; 1:10 0x0533 , 0x0433 , ... 0x0133 ,
;[14:231] 0x0533 , 0x0433 , ... 0x0133 ,
VARIABLE_SECTION:
__create_X: ;
dw 0x0533 ; 0x0533 comma
dw 0x0433 ; 0x0433 comma
dw 0x0333 ; 0x0333 comma
dw 0x0233 ; 0x0233 comma
dw 0x0133 ; 0x0133 comma
; seconds: 1 ;[14:75]
dworkin@dw-A15:~/Programovani/ZX/Forth/M4$ ../check_word.sh 'CREATE(X)PUSHS_COMMA(0x3305,0x3304,0x3303,0x3302,0x3301)'
X EQU __create_X
push HL ; 1:11 0x3305 , 0x3304 , ... 0x3301 , step:-1 to 1
ld HL, __create_X ; 3:10 0x3305 , 0x3304 , ... 0x3301 ,
ld BC, 0x0533 ; 3:10 0x3305 , 0x3304 , ... 0x3301 ,
ld (HL),B ; 1:7 0x3305 , 0x3304 , ... 0x3301 ,
inc HL ; 1:6 0x3305 , 0x3304 , ... 0x3301 ,
ld (HL),C ; 1:7 0x3305 , 0x3304 , ... 0x3301 ,
inc HL ; 1:6 0x3305 , 0x3304 , ... 0x3301 ,
djnz $-4 ; 2:8/13 0x3305 , 0x3304 , ... 0x3301 ,
pop HL ; 1:10 0x3305 , 0x3304 , ... 0x3301 ,
;[14:231] 0x3305 , 0x3304 , ... 0x3301 ,
VARIABLE_SECTION:
__create_X: ;
dw 0x3305 ; 0x3305 comma
dw 0x3304 ; 0x3304 comma
dw 0x3303 ; 0x3303 comma
dw 0x3302 ; 0x3302 comma
dw 0x3301 ; 0x3301 comma
; seconds: 0 ;[14:75]
Pokud to zacina v jednicce tak to same jen se to uklada odzadu.
Kód:
dworkin@dw-A15:~/Programovani/ZX/Forth/M4$ ../check_word.sh 'CREATE(X)PUSHS_COMMA(0x0133,0x0233,0x0333,0x0433,0x0533)'
X EQU __create_X
push HL ; 1:11 0x0133 , 0x0233 , ... 0x0533 , step:+256 from hi=1
ld HL, __create_X+9; 3:10 0x0133 , 0x0233 , ... 0x0533 ,
ld BC, 0x0533 ; 3:10 0x0133 , 0x0233 , ... 0x0533 ,
ld (HL),B ; 1:7 0x0133 , 0x0233 , ... 0x0533 ,
dec HL ; 1:6 0x0133 , 0x0233 , ... 0x0533 ,
ld (HL),C ; 1:7 0x0133 , 0x0233 , ... 0x0533 ,
dec HL ; 1:6 0x0133 , 0x0233 , ... 0x0533 ,
djnz $-4 ; 2:8/13 0x0133 , 0x0233 , ... 0x0533 ,
pop HL ; 1:10 0x0133 , 0x0233 , ... 0x0533 ,
;[14:231] 0x0133 , 0x0233 , ... 0x0533 ,
VARIABLE_SECTION:
__create_X: ;
dw 0x0133 ; 0x0133 comma
dw 0x0233 ; 0x0233 comma
dw 0x0333 ; 0x0333 comma
dw 0x0433 ; 0x0433 comma
dw 0x0533 ; 0x0533 comma
; seconds: 0 ;[14:75]
dworkin@dw-A15:~/Programovani/ZX/Forth/M4$ ../check_word.sh 'CREATE(X)PUSHS_COMMA(0x3301,0x3302,0x3303,0x3304,0x3305)'
X EQU __create_X
push HL ; 1:11 0x3301 , 0x3302 , ... 0x3305 , step:+1 from 1
ld HL, __create_X+9; 3:10 0x3301 , 0x3302 , ... 0x3305 ,
ld BC, 0x0533 ; 3:10 0x3301 , 0x3302 , ... 0x3305 ,
ld (HL),C ; 1:7 0x3301 , 0x3302 , ... 0x3305 ,
dec HL ; 1:6 0x3301 , 0x3302 , ... 0x3305 ,
ld (HL),B ; 1:7 0x3301 , 0x3302 , ... 0x3305 ,
dec HL ; 1:6 0x3301 , 0x3302 , ... 0x3305 ,
djnz $-4 ; 2:8/13 0x3301 , 0x3302 , ... 0x3305 ,
pop HL ; 1:10 0x3301 , 0x3302 , ... 0x3305 ,
;[14:231] 0x3301 , 0x3302 , ... 0x3305 ,
VARIABLE_SECTION:
__create_X: ;
dw 0x3301 ; 0x3301 comma
dw 0x3302 ; 0x3302 comma
dw 0x3303 ; 0x3303 comma
dw 0x3304 ; 0x3304 comma
dw 0x3305 ; 0x3305 comma
; seconds: 0 ;[14:75]
Pridal jsem identifikaci i kdyz je ten prirustek jiny nez +-1. A pro +-2 udelal vlastni kod, to se muze hodit a zase jde pouzit djnz.
Kód:
dworkin@dw-A15:~/Programovani/ZX/Forth/M4$ ../check_word.sh 'CREATE(X)PUSHS_COMMA(0x0933,0x0733,0x0533,0x0333,0x0133)'
X EQU __create_X
push HL ; 1:11 0x0933 , 0x0733 , ... 0x0133 , step:-512 to hi=2
ld HL, __create_X ; 3:10 0x0933 , 0x0733 , ... 0x0133 ,
ld BC, 0x0A33 ; 3:10 0x0933 , 0x0733 , ... 0x0133 ,
dec B ; 1:4 0x0933 , 0x0733 , ... 0x0133 ,
ld (HL),C ; 1:7 0x0933 , 0x0733 , ... 0x0133 ,
inc HL ; 1:6 0x0933 , 0x0733 , ... 0x0133 ,
ld (HL),B ; 1:7 0x0933 , 0x0733 , ... 0x0133 ,
inc HL ; 1:6 0x0933 , 0x0733 , ... 0x0133 ,
djnz $-5 ; 2:8/13 0x0933 , 0x0733 , ... 0x0133 ,
pop HL ; 1:10 0x0933 , 0x0733 , ... 0x0133 ,
;[15:251] 0x0933 , 0x0733 , ... 0x0133 ,
VARIABLE_SECTION:
__create_X: ;
dw 0x0933 ; 0x0933 comma
dw 0x0733 ; 0x0733 comma
dw 0x0533 ; 0x0533 comma
dw 0x0333 ; 0x0333 comma
dw 0x0133 ; 0x0133 comma
; seconds: 1 ;[15:79]
dworkin@dw-A15:~/Programovani/ZX/Forth/M4$ ../check_word.sh 'CREATE(X)PUSHS_COMMA(0x3309,0x3307,0x3305,0x3303,0x3301)'
X EQU __create_X
push HL ; 1:11 0x3309 , 0x3307 , ... 0x3301 , step:-2 to 2
ld HL, __create_X ; 3:10 0x3309 , 0x3307 , ... 0x3301 ,
ld BC, 0x0A33 ; 3:10 0x3309 , 0x3307 , ... 0x3301 ,
dec B ; 1:4 0x3309 , 0x3307 , ... 0x3301 ,
ld (HL),B ; 1:7 0x3309 , 0x3307 , ... 0x3301 ,
inc HL ; 1:6 0x3309 , 0x3307 , ... 0x3301 ,
ld (HL),C ; 1:7 0x3309 , 0x3307 , ... 0x3301 ,
inc HL ; 1:6 0x3309 , 0x3307 , ... 0x3301 ,
djnz $-5 ; 2:8/13 0x3309 , 0x3307 , ... 0x3301 ,
pop HL ; 1:10 0x3309 , 0x3307 , ... 0x3301 ,
;[15:251] 0x3309 , 0x3307 , ... 0x3301 ,
VARIABLE_SECTION:
__create_X: ;
dw 0x3309 ; 0x3309 comma
dw 0x3307 ; 0x3307 comma
dw 0x3305 ; 0x3305 comma
dw 0x3303 ; 0x3303 comma
dw 0x3301 ; 0x3301 comma
; seconds: 0 ;[15:79]
dworkin@dw-A15:~/Programovani/ZX/Forth/M4$ ../check_word.sh 'CREATE(X)PUSHS_COMMA(0x0133,0x0333,0x0533,0x0733,0x0933)'
X EQU __create_X
push HL ; 1:11 0x0133 , 0x0333 , ... 0x0933 , step:+512 from hi=2
ld HL, __create_X+9; 3:10 0x0133 , 0x0333 , ... 0x0933 ,
ld BC, 0x0A33 ; 3:10 0x0133 , 0x0333 , ... 0x0933 ,
dec B ; 1:4 0x0133 , 0x0333 , ... 0x0933 ,
ld (HL),C ; 1:7 0x0133 , 0x0333 , ... 0x0933 ,
dec HL ; 1:6 0x0133 , 0x0333 , ... 0x0933 ,
ld (HL),B ; 1:7 0x0133 , 0x0333 , ... 0x0933 ,
dec HL ; 1:6 0x0133 , 0x0333 , ... 0x0933 ,
djnz $-5 ; 2:8/13 0x0133 , 0x0333 , ... 0x0933 ,
pop HL ; 1:10 0x0133 , 0x0333 , ... 0x0933 ,
;[15:251] 0x0133 , 0x0333 , ... 0x0933 ,
VARIABLE_SECTION:
__create_X: ;
dw 0x0133 ; 0x0133 comma
dw 0x0333 ; 0x0333 comma
dw 0x0533 ; 0x0533 comma
dw 0x0733 ; 0x0733 comma
dw 0x0933 ; 0x0933 comma
; seconds: 0 ;[15:79]
dworkin@dw-A15:~/Programovani/ZX/Forth/M4$ ../check_word.sh 'CREATE(X)PUSHS_COMMA(0x3301,0x3303,0x3305,0x3307,0x3309)'
X EQU __create_X
push HL ; 1:11 0x3301 , 0x3303 , ... 0x3309 , step:+2 from 2
ld HL, __create_X+9; 3:10 0x3301 , 0x3303 , ... 0x3309 ,
ld BC, 0x0A33 ; 3:10 0x3301 , 0x3303 , ... 0x3309 ,
dec B ; 1:4 0x3301 , 0x3303 , ... 0x3309 ,
ld (HL),B ; 1:7 0x3301 , 0x3303 , ... 0x3309 ,
dec HL ; 1:6 0x3301 , 0x3303 , ... 0x3309 ,
ld (HL),C ; 1:7 0x3301 , 0x3303 , ... 0x3309 ,
dec HL ; 1:6 0x3301 , 0x3303 , ... 0x3309 ,
djnz $-5 ; 2:8/13 0x3301 , 0x3303 , ... 0x3309 ,
pop HL ; 1:10 0x3301 , 0x3303 , ... 0x3309 ,
;[15:251] 0x3301 , 0x3303 , ... 0x3309 ,
VARIABLE_SECTION:
__create_X: ;
dw 0x3301 ; 0x3301 comma
dw 0x3303 ; 0x3303 comma
dw 0x3305 ; 0x3305 comma
dw 0x3307 ; 0x3307 comma
dw 0x3309 ; 0x3309 comma
; seconds: 0 ;[15:79]
A obdobne to jde udelat i kdyz to konci nebo zacina na cisle 2.
Kód:
workin@dw-A15:~/Programovani/ZX/Forth/M4$ ../check_word.sh 'CREATE(X)PUSHS_COMMA(0x0A33,0x0833,0x0633,0x0433,0x0233)'
X EQU __create_X
push HL ; 1:11 0x0A33 , 0x0833 , ... 0x0233 , step:-512 to hi=2
ld HL, __create_X ; 3:10 0x0A33 , 0x0833 , ... 0x0233 ,
ld BC, 0x0A33 ; 3:10 0x0A33 , 0x0833 , ... 0x0233 ,
ld (HL),C ; 1:7 0x0A33 , 0x0833 , ... 0x0233 ,
inc HL ; 1:6 0x0A33 , 0x0833 , ... 0x0233 ,
ld (HL),B ; 1:7 0x0A33 , 0x0833 , ... 0x0233 ,
inc HL ; 1:6 0x0A33 , 0x0833 , ... 0x0233 ,
dec B ; 1:4 0x0A33 , 0x0833 , ... 0x0233 ,
djnz $-5 ; 2:8/13 0x0A33 , 0x0833 , ... 0x0233 ,
pop HL ; 1:10 0x0A33 , 0x0833 , ... 0x0233 ,
;[15:251] 0x0A33 , 0x0833 , ... 0x0233 ,
VARIABLE_SECTION:
__create_X: ;
dw 0x0A33 ; 0x0A33 comma
dw 0x0833 ; 0x0833 comma
dw 0x0633 ; 0x0633 comma
dw 0x0433 ; 0x0433 comma
dw 0x0233 ; 0x0233 comma
; seconds: 0 ;[15:79]
dworkin@dw-A15:~/Programovani/ZX/Forth/M4$ ../check_word.sh 'CREATE(X)PUSHS_COMMA(0x330A,0x3308,0x3306,0x3304,0x3302)'
X EQU __create_X
push HL ; 1:11 0x330A , 0x3308 , ... 0x3302 , step:-2 to 2
ld HL, __create_X ; 3:10 0x330A , 0x3308 , ... 0x3302 ,
ld BC, 0x0A33 ; 3:10 0x330A , 0x3308 , ... 0x3302 ,
ld (HL),B ; 1:7 0x330A , 0x3308 , ... 0x3302 ,
inc HL ; 1:6 0x330A , 0x3308 , ... 0x3302 ,
ld (HL),C ; 1:7 0x330A , 0x3308 , ... 0x3302 ,
inc HL ; 1:6 0x330A , 0x3308 , ... 0x3302 ,
dec B ; 1:4 0x330A , 0x3308 , ... 0x3302 ,
djnz $-5 ; 2:8/13 0x330A , 0x3308 , ... 0x3302 ,
pop HL ; 1:10 0x330A , 0x3308 , ... 0x3302 ,
;[15:251] 0x330A , 0x3308 , ... 0x3302 ,
VARIABLE_SECTION:
__create_X: ;
dw 0x330A ; 0x330A comma
dw 0x3308 ; 0x3308 comma
dw 0x3306 ; 0x3306 comma
dw 0x3304 ; 0x3304 comma
dw 0x3302 ; 0x3302 comma
; seconds: 0 ;[15:79]
dworkin@dw-A15:~/Programovani/ZX/Forth/M4$ ../check_word.sh 'CREATE(X)PUSHS_COMMA(0x0233,0x0433,0x0633,0x0833,0x0A33)'
X EQU __create_X
push HL ; 1:11 0x0233 , 0x0433 , ... 0x0A33 , step:+512 from hi=2
ld HL, __create_X+9; 3:10 0x0233 , 0x0433 , ... 0x0A33 ,
ld BC, 0x0A33 ; 3:10 0x0233 , 0x0433 , ... 0x0A33 ,
ld (HL),C ; 1:7 0x0233 , 0x0433 , ... 0x0A33 ,
dec HL ; 1:6 0x0233 , 0x0433 , ... 0x0A33 ,
ld (HL),B ; 1:7 0x0233 , 0x0433 , ... 0x0A33 ,
dec HL ; 1:6 0x0233 , 0x0433 , ... 0x0A33 ,
dec B ; 1:4 0x0233 , 0x0433 , ... 0x0A33 ,
djnz $-5 ; 2:8/13 0x0233 , 0x0433 , ... 0x0A33 ,
pop HL ; 1:10 0x0233 , 0x0433 , ... 0x0A33 ,
;[15:251] 0x0233 , 0x0433 , ... 0x0A33 ,
VARIABLE_SECTION:
__create_X: ;
dw 0x0233 ; 0x0233 comma
dw 0x0433 ; 0x0433 comma
dw 0x0633 ; 0x0633 comma
dw 0x0833 ; 0x0833 comma
dw 0x0A33 ; 0x0A33 comma
; seconds: 0 ;[15:79]
dworkin@dw-A15:~/Programovani/ZX/Forth/M4$ ../check_word.sh 'CREATE(X)PUSHS_COMMA(0x3302,0x3304,0x3306,0x3308,0x330A)'
X EQU __create_X
push HL ; 1:11 0x3302 , 0x3304 , ... 0x330A , step:+2 from 2
ld HL, __create_X+9; 3:10 0x3302 , 0x3304 , ... 0x330A ,
ld BC, 0x0A33 ; 3:10 0x3302 , 0x3304 , ... 0x330A ,
ld (HL),B ; 1:7 0x3302 , 0x3304 , ... 0x330A ,
dec HL ; 1:6 0x3302 , 0x3304 , ... 0x330A ,
ld (HL),C ; 1:7 0x3302 , 0x3304 , ... 0x330A ,
dec HL ; 1:6 0x3302 , 0x3304 , ... 0x330A ,
dec B ; 1:4 0x3302 , 0x3304 , ... 0x330A ,
djnz $-5 ; 2:8/13 0x3302 , 0x3304 , ... 0x330A ,
pop HL ; 1:10 0x3302 , 0x3304 , ... 0x330A ,
;[15:251] 0x3302 , 0x3304 , ... 0x330A ,
VARIABLE_SECTION:
__create_X: ;
dw 0x3302 ; 0x3302 comma
dw 0x3304 ; 0x3304 comma
dw 0x3306 ; 0x3306 comma
dw 0x3308 ; 0x3308 comma
dw 0x330A ; 0x330A comma
; seconds: 0 ;[15:79]