хорошо постарался
Вид для печати
я тоже не возьму в толк DAA - объясните, что не так - 5 минут побыть дураком очень полезно.
Процедурки поворота на 90 град - отличные. И потраченное редкое свободное время оценено. Хорошо, друзья, а возможен ли табличный вариант или еще что-то - выжать скорость. Ну, разумеется, без фанатизма на полпамяти )))
Тут стало снова интересно :)
Вот, генерация автомаски тайла 16х16 из Диззика. Кто быстрее? :v2_dizzy_step:
- - - Добавлено - - -Код:;---------------------------------------------------------------
; Генерация автомаски тайла
CREATE_AUTOMASK:
LD HL,FOREGND_BUF ; Сдвиг вверx
LD DE,FOREGND_BUF+4
LD C,#0F
LD B,C
JR UP_CPY1
UP_CPY2 INC E
INC E
INC E
INC L
INC L
INC L
UP_CPY1 LD A,(DE)
INC E
OR (HL)
LD (HL),A
INC L
LD A,(DE)
OR (HL)
LD (HL),A
DJNZ UP_CPY2
EX DE,HL ; Сдвиг вниз
LD B,C
JR DN_CPY1
DN_CPY2 DEC E
DEC E
DEC E
DEC L
DEC L
DEC L
DN_CPY1 LD A,(DE)
DEC E
OR (HL)
LD (HL),A
DEC L
LD A,(DE)
OR (HL)
LD (HL),A
DJNZ DN_CPY2
EX DE,HL
INC C ; Сдвиг вправо
LD B,C
RR_LP2 LD E,(HL)
LD A,E
RRA
OR E
LD (HL),A
INC L
RR E
LD A,(HL)
RRA
OR (HL)
LD (HL),A
INC L
INC L
INC L
DJNZ RR_LP2
LD B,C ; Сдвиг влево и инверсия
RL_LP2 DEC L
DEC L
DEC L
LD E,(HL)
LD A,E
RLA
OR E
CPL
LD (HL),A
DEC L
RL E
LD A,(HL)
RLA
OR (HL)
CPL
LD (HL),A
DJNZ RL_LP2
RET
Можно ещё попробовать придумать быстрый алгоритм, который может сделать маску с заливкой пустот внутри.
а есть какие-то параметры вход/выход, особенности, ограничения?
я чужой на этом празднике жизни(:
Шынни, давай не скромничай! Лучше станцуй на столе со своим вариантом ;))
Один товарищ написал волшебную процедуру, которая мягко убивает 128-ой бейсик, не прерывая выполнение самой бейсик-программы. Как известно, если бейсик запущен в 128-ом варианте, то он и работает медленнее, и буфер принтера занимает и т.д. С этой же процедурой - всё зашибись. Есть только один вопрос, реально ли её сделать покороче 45-ти байт? :)
Скрытый текст
Код:OUTPUT Usr0x02.bas
org #5CCB
;; Three basic lines
line1 dw #0100,lenln1-4
db REM,'Busy soft 07.04.2017',#0D
line2 dw #0200,lenln2-4
db RAND,USR,VAL,'"',PEEK,'23627+256*',PEEK,'23628+3"',#0D
line3 dw #0300,lenln3-4
db LOAD,'""',#0D
;; Basic variables
varss db 'S'+#80 ;; Variable s$
dw lencod ;; Length of whole variable content
OUTPUT Usr0x02.cod
;; Content of variable s$
start res 4,(iy+#01) ;; Switch to 48 basic
ld hl,(ramtop) ;; Recontruction of stack for 48 basic
ld (hl),#3E ;; End-of-stack mark for basic RETURN
dec hl ;; (for detect RETURN without GOSUB)
ld sp,hl
ld hl,main ;; Standart error handler
push hl ;; (for displaying error messages)
ld (errsp),sp
ld hl,inican
ld de,canmem ;; Base address for channel information
ld bc,21
ld (chans),de
ldir
ld l,low stdata ;; Initial open channels
ld e,low strms
ld c,low 14
ldir
jp runbas ;; Continue in 48 basic interpreter
endend
;; Lengths
lenln1 = line2-line1
lenln2 = line3-line2
lenln3 = varss-line3
lenbas = varss-line1
lencod = endend-start
lenall = endend-line1
;; Basic tokens
REM = #EA
RAND = #F9
VAL = #B0
USR = #C0
PEEK = #BE
LOAD = #EF
;; Used ROM addresses
main = #1303
inican = #15AF
stdata = #15C6
runbas = #1BF4
;; Used system variables
strms = #5C10
errsp = #5C3D
chans = #5C4F
ramtop = #5CB2
canmem = #5CB6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[свернуть]
А я всегда использовал для этого дела кусок от загрузчика TASM. Например.