Еще неудобно, что команда djnz работает с регистром B (старшим в регистровой паре BC), а не с регистром C (младшим). Т.к. чаще всего в результате расчетов счетчик для цикла получается в младшем регистре. Либо при выполнении цикла должен быть в младшем регистре, чтобы сделать старший равным нулю и использовать в дальнейшем команды типа add hl,bc.
Интересная мысль - это расширить разрядность регистров до 32-х бит. И добавить префикс, разрешающий командам с ними работать. То есть будут пары команд:
JMP4 - загрузить в PC 32 бита.
MOV R, R - переместить 8 бит данных, остальные 24 бита обнулить.
MOV4 R, R - переместить 32 бит данных.
PUSH4 B- сохранить в стек 32 бита.
ADD4 A - сложение 32 бита.
И в этом случае отказаться от регистровых пар:
MOV [HL], A
MOV4 [H], A
Таким образом легко сможет выполняться два кода - старый и новый. Причем новый может безопасно лежать в верхней памяти (>64k).
Последний раз редактировалось vinxru; 11.04.2012 в 10:40.
А как насчёт этих?
ld8 (NN),N
ld16 (NN),NN
ld8 (NN),(NN)
ld16 (NN),(NN)
ld8 r,(NN)
ld16 rp,(ii+N)
ld16 (ii+N),rp
add/sub r,N
ldsigned rp,r
ld16 rp,rp
neg16 rp
sub16 rp,rp
ld8 a,(NN+a)
call (NN+a*2) //switch
ld16 hl,NN+a*k
ld16 rp,(hl):hl+=2
ld16 (hl),rp:hl+=2
inc (NN)
dec (NN)
rp*=2
rp/=2
push bc,de,hl
pop hl,de,bc
Если на рестартах, то можно сделать:
farcall (с обычным ret)
switch (как #3d13)
[fastswitch (0..255)] //switch с диапазонами делается через call range_to_code:fastswitch
startcritical
endcritical
[cin > a]
[cout < a (как RST 16)]
Что ещё? Рестартов всего 8 штук.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
ld16 rp,(ii+N) - вместо ld l,(ix+N):ld h,(ix+(N+1)) (6 байт)
ld16 (ii+N),rp - вместо ld (ix+N),l:ld (ix+(N+1)),h (6 байт)
ldsigned rp,r - вместо ld l,a:rla:sbc a,a:ld h,a (4 байта)
neg16 rp - вместо xor a:sub l:ld l,a:sbc a,h:sub l:ld h,a (6 байт)
если так хочется свой комп
зачем делать его спектрум совместимым и какой в этом смысл ?
С уважением,
Jerri / Red Triangle.
Кто тут говорит про свой комп?
Скрытый текст
Profi 5.06 1024K 12Mhz (кварц на 24), палитра, COM-порт, часы, hdd, covox, программатор
ZX-Spectrum +3, ZX-Spectrum +2B, ZX-Spectrum +2, ZX Spectrum 48, ZX Spectrum 48+
ZX Evolution Rev B.
Color 48 + Beta Disk Interface +FDD+YM2149F
Орель-08БК
Pentagon-48 (недоссобранный кем-то)
Pentagon-128 (полуубитый)
Кворум-128 (в ремонте)
Магик-05 (в ремонте)
Robotron 1715
Корвет ПК8020 и ПК8010
Amstrad CPC 464
Amstrad CPC 6128[свернуть]
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)