-
Notifications
You must be signed in to change notification settings - Fork 12
/
zxs-mandelbrot.asm
74 lines (61 loc) · 1.5 KB
/
zxs-mandelbrot.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
DEVICE ZXSPECTRUM48
org $8000
start:
jp init
include "../Z80/mandelbrot.asm"
ROM_CLS = $0DAF
COLOR_MAP = $5800
i_result: db 0
color_codes:
db 8,16,24,32,40,48,56,72
db 80,88,96,104,112,120,0
init:
di
exx ; save hl' register on stack
push hl ; to correct return into basic
call ROM_CLS
ld bc,0 ; X = 0, Y = 0
.loopm:
call mand_get
ld h,0
ld l,c ; HL = Y
add hl,hl
add hl,hl
add hl,hl
add hl,hl
add hl,hl ; HL = Y*32
ld de,COLOR_MAP
add hl,de ; HL = COLOR_MAP+Y*32
ld d,0
ld e,b ; DE = X
add hl,de ; HL = color attribute (x,y)
ex de,hl
ld hl,color_codes
add a,l ; DE = I
ld l,a
jp nc,.loopm1
inc h
.loopm1:
;add ix,de ; IX = &(color code for I)
ld a,(hl) ; A = color code for I
ld (de),a ; set color code
inc b ; increment X
ld a,MAND_WIDTH
cp b
jp nz,.loopm ; loop until X = width
ld b,0 ; X = 0
inc c ; increment Y
ld a,MAND_HEIGHT
cp c
jp nz,.loopm ; loop until Y = height
pop hl ; restore hl' register
exx ; from stack
ei
ret
; Deployment
LENGTH = $ - start
; option 1: tape
include TapLib.asm
MakeTape ZXSPECTRUM48, "man48.tap", "man48", start, LENGTH, start
; option 2: snapshot
SAVESNA "man48.sna", start