Этюды

Программирование, алгоритмы

Postby g0blinish » Sun, 01.12.2013 12:22:59

Немного кода:
Генерация чанок
Code: Select all
;69 bytes -2
   device zxspectrum128
        ORG #6000
begin
matrix:
 db 0*8,8*8,2*8,10*8
 db 12*8,4*8,14*8,6*8
 db 3*8,11*8,1*8,9*8
 db 15*8,7*8,13*8,5*8
gench:
;  For y=0 To 128;;;;;+8
;  For x=0 To 7
;      i=x&3
;      j=y&3
;      II=y>>3
;      If II <= D(i,j)
;         Plot(x,y,0)
;      Else
;         Plot(y,x,RGB(255,255,255))
;      EndIf
;    Next x
;  Next y

 ld hl,$4000
 ld b,$80;bit weight
 ld e,0;y
for_y:
 ld d,0;x
 push hl
for_x:
 push hl
;      i=x&3
;      j=y&3
 ld a,e;y
 and 3
 ld c,a
 add a,a
 add a,a;c
 ld c,a
 ld a,d;x
 and 3
 add a,c
 ld l,a
 ld h,matrix/256
 ld a,e;II=y>>3
; and %11111000
; rra:rra:rra
 cp (hl);      If II <= D(i,j)
 pop hl
;; jr z,plot
 jr c,noplot
plot:
 ld a,b:or (hl):ld (hl),a
noplot:
 inc h
 inc d
 bit 3,d:jr z,for_x
 pop hl
 or a:rrc b:jr nc,nonextp
 inc l
nonextp:

 inc e:bit 7,e:jr z,for_y
 
 jr $
end
   display /d,end-begin
   savesna "!gc.sna",gench;;begin



---

Генерация лабиринта
Code: Select all
   device zxspectrum128
        ORG #6000
begin
; jr domaze
a_array: db 0-1,0-32,1,32
domaze:
;  30 INPUT "Select level(1 to 6)\  ";ta
;  40 LET ta=1100-100*ta
;  50 BORDER 1: PAPER 1: INK 0: CLS : INK 7
;  60 LET s=0: LET lives=3
;  70 PRINT BRIGHT 1; PAPER 6; INK 2;"\  SCORE\  \  \  \  \  \  \  HIGH SCORE\  \  \  \  \  \  \  \  "
;  80 FOR n=22561 TO 22589: POKE n,16: POKE n+640,16: NEXT n ;28 times

 ld hl,#5800
 ld de,$5801
 ld (hl),1*8
 ld bc,768
 ldir
 
 ld hl,#5800
 ld de,#5800+32*22
 ld b,32
 ld a,8+2
drl3:ld (hl),a
 ld (de),a
 inc l,e:djnz drl3

 ld hl,22561
 ld de,22561+640
 ld b,28+1
drl: ld a,16
 ld (de),a
 ld (hl),a
 inc hl,de
 djnz drl
;  90 FOR n=1 TO 21: POKE 22528+n*32,16: POKE 22558+n*32,16: POKE 22559+n*32,9: NEXT n
 ld b,1
 ld ix,22528;22559-22528=31
 ld de,32
drl2:
 add ix,de
 ld (ix),$10
 ld (ix+30),$10
 ld (ix+31),9
 inc b
 ld a,b:cp 22:jp nz,drl2
; 100 LET b=22593: LET a=b
 ld hl,22593;a::22593-22528=65(32*2+1)
;;? ld de,22593;b::
; 110 DIM a(4): LET a(1)=-1: LET a(2)=-32: LET a(3)=1: LET a(4)=32

; 120 POKE a,56
 ld (hl),56;7*8
; 130 LET j=INT (RND*4)+1: LET g=j
L130: call random
 and 3
 ;;add a,2
 ld ixl,a;g
 ld ixh,a;j
; 140 LET b=a+a(j)*2: IF PEEK b=8 THEN POKE b,j: POKE a+a(j),56: LET a=b: GO TO 130
L140:
 ;ei:halt
 ld c,ixh;;ld a,ixh
 ld b,high a_array
;; add a,low a_array
;; jr nc,noinc
;; inc b
;;noinc: ld c,a
 ld a,(bc);;;9 bytes *2 instead of call NNN:ret 9-4=5bytes
 ld e,a
 add a,a
 sbc a,a
 ld d,a
 push hl
 push de
 add hl,de
 add hl,de;a(j)*2
 ld de,hl;b=a+a(j)*2
 ld a,(de)
 pop bc
 pop hl
 cp 8:jr nz,L150
 ld a,ixh
 ld (de),a
 push hl
 add hl,bc
 ld (hl),56
 pop hl
 push de:pop hl
 jr L130
L150:
; 150 LET j=j+1: IF j=5 THEN LET j=1
 ld a,ixh
 inc a
 and 3
 ld ixh,a
; 160 IF j<>g THEN GO TO 140
 cp ixl;g
 jr nz,L140
; 170 LET j=PEEK a: POKE a,56: IF j<5 THEN LET a=a-a(j)*2: GO TO 130
 ld a,(hl)
 ld ixh,a
 ld (hl),56
 cp 5
 jr nc,noif

 ld c,ixh
 ld b,high a_array
 ld a,(bc)
 ld e,a
 add a,a
 sbc a,a
 ld d,a
 or a:sbc hl,de
 or a:sbc hl,de
 jr L130
noif:
 jr $
random:  PUSH BC
R1: LD C,#15
; LD C,A
R2: LD A,#70
 ADD A,C
 LD C,A
 LD (R1+1),A
R3:LD A,#FD
 SUB C
 LD C,A
 LD (R2+1),A
 RRCA
 LD (R3+1),A
 LD A,C
 POP BC
 RET

end
   display /d,end-begin
   savesna "!maze.sna",domaze;;begin



---

Генерация фона, выдрано из какой-то крэктры
Code: Select all
   device zxspectrum128
        ORG #6000
begin
sub_68F9:

sub_6917:
      ld   hl, 0BC00h
      ld   de, $4000
      ld   b, 0C0h
loc_691F:
      ld   (hl), e
      inc   h
      ld   (hl), d
      dec   h
      inc   l
      call sub_6847

      djnz   loc_691F
      ld   hl, 0BE00h
      ld   c, 0
loc_6932:
      ld   b, 8

loc_6934:
      ld   (hl), c
      inc   l
      djnz   loc_6934
      inc   c
      ld   a, 20h
      cp   c
      jr   nz, loc_6932
      ld   hl, 0BF00h
      ld   b, 0
      ld   a, 80h

loc_6945:
      ld   (hl), a
      inc   l
      rrca
      djnz   loc_6945




loc_694B:
      ;xor   a
      ;ld   (loc_6972+1), a
;      ld   a, 0C0h   ; 'А'
;      ld   (loc_698C+1), a
      ld   bc, 20C0h
      ld   de, 0

loc_695A:
      dec   c

loc_695B:
      ld   a, b
      add   a, c
      ld   b, a
      inc   c
      inc   c
      add   a, e
      jp   c, loc_697A
      push   de
      ld   h, 0BCh   ; 'ј'
      rr   d
      ld   l, d
      ld   a, (hl)
      inc   h
      ld   d, (hl)
      inc   h
      ld   l, e
      add   a, (hl)
      ld   e, a
      inc   h

loc_6972:
      ld   a, 0
      add   a, d
      ld   d, a
      ld   a, (de)
      or   (hl)
      ld   (de), a
      pop   de

loc_697A:
      inc   e
      jp   nz, loc_695B
      inc   d
      inc   d
      ld   a, d
      or   a
      jr   nz, loc_698C
      ld   a, (loc_6972+1)
      xor   10h
      ld   (loc_6972+1), a

loc_698C:
      ld   a, $C0
      dec   a
      ld   (loc_698C+1), a
      jp   nz, loc_695A

 jr $

sub_6847:
      inc   d
      ld   a, d
      and   7
      ret   nz
      ld   a, e
      add   a, 20h ; ' '
      ld   e, a
      ret   c
      ld   a, d
      sub   8
      ld   d, a
      ret


end
   display /d,end-begin
   savesna "!void.sna",begin

[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby g0blinish » Thu, 05.12.2013 14:09:57

свалка процiдурок, но годная..
http://wordpress.animatez.co.uk/program ... /z80-demos
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby g0blinish » Mon, 18.01.2016 16:44:52

Копался в EP128, встретил вот такой код
INC D
LD A,D
AND 7
JR NZ,L2
LD A,E
ADD A,32
LD E,A
CCF
SBC A,A
AND 0F8H
ADD A,D
LD D,A
;A ciklusvaltozo visszatoltese
L2 EX AF,AF'
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby g0blinish » Mon, 18.01.2016 18:15:10

дошли руки до длинной и нудной статейки. Заливка области на экране(быстрая) и заливка текстурой.
Естественно, афтар проебал часть сырков в статье. в архиве рабочие.
Attachments
FastWell-BehavedPatternFloodFillA.zip
(49.36 KiB) Downloaded 474 times
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby g0blinish » Wed, 03.02.2016 11:52:32

Соскучился по говнокоду написал код заполнения экрана по спирали:

Code: Select all
   device zxspectrum128
        ORG #6000
begin
;<-----32----->
;|            |
;23          24
;|            |
;<-----31----->
 xor a:out ($FE),a
 ld hl,#5800
 ld ixl,8+2+2

; jr $
 
sp_lp:
 push hl
hl1:ld a,30

 ld b,a
 dec a,a
 ld (hl1+1),a
 ld de,1
 call draw_l
; or a:sbc hl,de


vd1:ld a,22
 ld b,a
 dec a,a
 ld (vd1+1),a
 ld de,32
 call draw_l
; or a:sbc hl,de


hl2:ld a,30
 ld b,a
 dec a,a
 ld (hl2+1),a
 ld de,-1
 call draw_l
; or a:sbc hl,de
 
vd2:ld a,22
 ld b,a
 dec a,a
 ld (vd2+1),a
 ld de,-32
 call draw_l
; or a:sbc hl,de
 pop hl
 ld de,33
 add hl,de
 dec ixl:jp nz,sp_lp

 ld hl,$5800,de,33
 ld b,14
ll: ld (hl),18
 add hl,de:djnz ll

 jr $
draw_l:
vd_lp:
 ;ld (hl),$FF
 ld a,(hl):cpl:ld (hl),a
 ei:halt
 add hl,de
 dec b:jp p,vd_lp
 ret

end
   display /d,end-begin
   savesna "!void.sna",begin


нутром чувствую, что там подвох, а понять не могу.
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby idxi » Wed, 26.07.2017 19:39:50

Самое время продолжить "Этюды"..)
С подробностями, чем, где и как компилить..
С Готовым примером и картинкой, как и что должно отобразиться до запуска *.sna

Respect
for Nice Work!
User avatar
idxi
 
Posts: 179
Joined: Mon, 03.07.2017 16:54:54


Return to Coding

Who is online

Users browsing this forum: No registered users and 1 guest

x